Rails 3, Jquery.загрузка без макета

#jquery #ruby-on-rails-3 #layout

#jquery #ruby-on-rails-3 #макет

Вопрос:

Мой вызов Ajax почти работает, но я не могу понять, почему мой макет все еще отображается? вот контекст:

На моем сайте есть страница контактов, использующая API LinkedIn. Я хочу загрузить информацию LinkedIn из вызова ajax при загрузке моей страницы. Это работает нормально.

Но результат my .load() отображается с макетом моего сайта. Я только хочу отобразить html в моем ajax_contact.html.erb..

contact.js

  $(document).ready(function() {

   $(".info_perso").load( '/contact/ajax_contact', {name:"benoit"}, function(data){  $(".info_perso").html( data );})

 });
  

ajax_contact.html.erb:

 <%if !@profile.nil?%>

                <%=image_tag(@profile.picture_url)%><br />
                <%=@profile.first_name %> <%=@profile.last_name %><br>
                <%=@profile.headline%><br> 
                <%=@profile.industry%><br> <br />
                <%=@profile.summary%><br> 


                <label class="linkedin_title">Education</label><br>
                <% @profile.educations.all.each {|edu| %>

                    Degre : <%=edu.degree%><br>         
                    Années : <%=edu.start_date.year%> - <%=edu.end_date.year%><br>                      
                    Concentration : <%=edu.field_of_study%><br>         
                    Universite : <%=edu.school_name%><br>           
                <%}%>
                <label class="linkedin_title">Experience</label><br>
                <% @profile.positions.all.each {|pos| %>
                    <label class="linkedin_subtitle"> Company:</label> <%=pos.company.name%><br><br>                            
                    <label class="linkedin_subtitle">Titre :</label> <%=pos.title%><br>         
                    <label class="linkedin_subtitle">Années :</label> <%=pos.start_date.month%>/<%=pos.start_date.year%> - <%=  pos.end_date? ? pos.end_date.month.to_s   "/"   pos.end_date.year.to_s : "now"%><br>                        
                    <label class="linkedin_subtitle">Description :</label> <%=pos.summary%><br/><br/>           
                <%}%>

            <%else%>
                <%=link_to "Activer linkedIn", :controller=>"linkedinAuth", :action=>"benoit", :name=>"benoit", :callback=>"/linkedinauth/callbackbenoit"%>
            <%end%>             
  

contact_controller.rb:

   def ajax_contact
name = params[:name]
linkedinInfo = LinkedinApiInfo.find(1)
linkedinCred = LinkedinCredential.find_by_name(name)
if !linkedinCred.nil?
  client = LinkedIn::Client.new(linkedinInfo.apiKey, linkedinInfo.secretKey)
  client.authorize_from_access(linkedinCred.acctoken, linkedinCred.accsecret)
  # Pick some fields
  fields = ['first-name', 'last-name', 'headline', 'industry', 'num-connections','educations', 'num-recommenders','recommendations-received', 'summary', 'positions','picture-url']

  @profile = client.profile :fields => fields
  @profile.recommendations_received.all.each {|rec| puts rec.recommendation_text}


  puts @profile

end
 rescue SocketError
  puts "Unable to connect"

  render "ajax_content", :content_type=>"text/html", :layout=>false

   end
  

Даже с :layout=>false мой макет все еще отображается!!! кто-нибудь может увидеть проблему?

Ответ №1:

Добавить

визуализация ‘ajax_contact’, :layout=>false

для вашего действия, в конце, также имя частичного представления должно начинаться с _ , поэтому ваше представление должно быть названо «_ajax_contact»

Комментарии:

1. затем переименуйте свое представление в ‘_ajax_contact’, чтобы rails знал, что это частичное представление

2. вы также изменили свой метод рендеринга? вам нужно только изменить имя файла.

3. На самом деле, я перепробовал все. _ajax_contact.html.erb с отображением ‘ajax_contact’, :layout=>false. затем отобразите ‘_ajax_context’, :layout=>false . затем визуализируйте: partial=>’ajax_context’, :layout=>false … Я не понимаю … хуже всего, что я уже делал это с другим проектом, и все, что мне нужно было, это поместить render:layout=>false в мой контроллер!!

4. боже… всегда глупая ошибка, лол.. мой render:layout=> false был в конце метода … после моей ошибки rescue SocketError …. так что это никогда не вызывалось! должен был отладить это раньше, спасибо за ваше время. Я приму ваш ответ в качестве благодарности 😉