Rails 4 odświeżanie strony(partiala) z użyciem Ajax

Mam widok renderujący dwa partiale. Jeden odpowiedzialny jest za content, a drugi to menu boczne.
Chciałbym, by klikając na link (obrazek) w menu bocznym przeładowywał się tylko ten div odpowiedzialny za treść.
Nie za bardzo orientuję się w Ajaxie, a tym bardziej w wersji railsowej, bo za dobrego tutoriala nie znalazłem (a już na pewno nie znalazłem takiej sytuacji, jak tutaj mam).
Bardzo proszę o pomoc w rozwiązaniu problemu.

obsługuje mój widok.
app/controllers/birds_controller.rb

[code] def sorted_birds

@sorts=Bird.all.sort_by!{|b| b.name} //potrzebne do utworzenia menu, kolejne ptaki w porządku alfabetycznym
if params[:id]
set_bird // @bird=Bird.find(params[:id]) wyświetli mi poszczególnego ptaka

else
@bird=0
end

rescue ActiveRecord::RecordNotFound
render :file => “#{Rails.root}/public/404.html”, :status => 404, :layout => false

end[/code]
mój widok główny. To właścnie div’a “główne” chcę przeładowywać z pomocą Ajax’a.
/app/views/birds/sorted_birds.html.erb

[code]

<%if @bird!=0%>
<%= render ‘show_it’%>
<%else%>

Witaj w świecie ptaków

"Strona główna"

<% end %>
<%=image_tag 'arrowup.png' %>
    <%= render "the_birds"%>
<%=image_tag 'arrowdown.png' %> [/code] widok poszczególnego ptaka /app/views/birds/_show_it.html.erb [code]

Name: <%= @bird.name %>

Rodzaj: <%= @bird.kind %>

Discription: <%= @bird.discription %>

Zdjęcie: <%= image_tag @bird.picture.url.to_s %>

Dźwięk: <% sciezka=@bird.birdsound.url %> <%= audio_tag("#{sciezka}", autoplay: false, controls: true) %>

[/code] widok menu /app/views/birds/_the_birds.html.erb [code]<% @sorts.each do |bird| %>
<%= link_to image_tag("#{bird.picture.url}", size: "130x130", border: 0), ptaki_path(bird), class: "birdmini", remote: true%>
<%end%>[/code]
  1. Linki powinny mieć atrybut remote: true
  2. Link prowadzi do akcji kontrolera, która wczytuje tekst, który chesz umieścić w divie
  3. Najważniejsze - tworzysz plik js.erb(ew. coffee) o takiej najzwie i położeniu, jakbyś tworzył zwykły view (czyli np. jak masz w kontrolerze BirdsController metodę show, to znajduje się ona w views/birds/show.js.erb)
    Tam wklejasz coś takiego (jak uzywasz jQuery)

$(".klasadivazopisem").html("<%= j render partial: ‘birds/nazwapartialazsamązawartościądiva’, locals: {nazwazmiennejlokalnejpartiala: @nazwazmiennejzopisemzkontorlera}} %>")

pamiętaj o tym j przed render, ważny jest

I powinno działać. Jak nic się nie będzie dziać, zajrzyj do terminalu gdzie masz odpalony serwer, powinien pokazać ewwntualne błedy. Może też sie okazać, że turbolinki coś ci psują w ajaksie, wtedy

  • możesz je wyłączyć, usuwając gem turbolinks z gemfile i require turbolinks w application.js
  • dodać gema jquery-turbolinks (albo coś takiego)

Dzięki za odpowiedź.
Jak mam rozumieć ten punkt 2? Jak to zapisać? bo chyba nie chodzi o :action=>cośtam? Może jakiś przykładzik? Będę wdzięczny.
Nie wiem jak pogodzić z jednej strony [quote]Link prowadzi do akcji kontrolera, która wczytuje tekst, który chesz umieścić w divie[/quote]
, by później renderować partiala z zawartością, jaką chcę zmieniać. Akcja kontrolera, która wczytuje tekst ma swój widok, ale nie partiala… w moim rozumieniu (pewnie błędnym) mam albo renderować widok w widoku, albo sprawić, by kontroler nie odpowiadał za widok, ale za partial…

Chodzi o to, że link w stylu

link_to bird.name, sorted_birds_birds_path(id: params[:id]), remote: true

jest przekazywany do kontrolera do akcji sorted_birds, a kontroler z racji “remote: true” odpowiada nie renderując sorted_birds.html.erb, tylko sorted_birds.js.erb. Tutoriali do tego nie brakuje, rzuć okiem np. na to

http://ruby.railstutorial.org/chapters/following-users#sec-a_working_follow_button_with_ajax

Moim zdaniem, z Rails Tutorialem powinieneś się zaznajomić dużo dokładniej, bo kod który przedstawiłeś łamie podstawowe railsowe konwencje :wink:

Rzeczywicie mam wrażenie, że wiele mam do nauki jeszcze. Wielkie dzięki za odpowiedź. Mój kod od początku mi się nie podobał, no ale działał. Do czasu jak widzę.

Jeszcze raz dzięki za zainteresowanie wszystkim, a teraz wracam do nauki…