[問題] Rails內建的Ajax傳導問題

作者: Vinn (Vinn)   2013-12-15 23:46:33
看不懂$ajax的寫法,所以用rails內建的方式使用
卻不知道哪裡出問題,看terminal也有顯示有傳正確的id進去,卻無法更改..
照著這個影片實作的 http://happycasts.net/episodes/66
我先說明一下我的流程,就是首頁顯示所有Toy的列表,
首頁最後有個render顯示當前current的toy (c_toy)
而會依照點選的toy.name改變最下面的current.toy的id跟name
而黃色是我覺得有出問題的地方...
==toys_controller.rb //params有id就設為該id 無則使用第一個
def index
@toys = Toy.all
if params[:toy_id]
@c_toy = Toy.find(params[:toy_id])
else
@c_toy = Toy.first
end
respond_to do |format|
format.html
fotmat.js
end
end
==index.html.erb (部分) 產生一整排連結,最後render
<% toys.each do |toy| %>
<% link_to toy.name , toy , :remote => true %>
<% end %>
<%=render 'ida' , :c_toy => @c_toy %>
==index.js.erb //用於replace render
$('.ida').replaceWith('j <%=render 'ida',:c_toy => @c_toy %>')
==_ida.html.erb //顯示當前toy的id 及name
<div class="ida">
<%= @c_toy.id %>
<%= @c_toy.name %>
</div>
照理來說應該是會成功,隨著我按哪個toy的名字下面就會render toy的名字出現
但是目前的情況就是,他卡在第一個toy,也就是controller第一次設定之後
後面就抓不到丟進去的id了...
請板上的高手解惑一下,拜託了...謝謝...
作者: hellolucky (做自己 好自在)   2013-02-15 23:56:00
還沒認真看過 但<%render 'ida',:c_toy => @c_toy %>是不是少了個等於?
作者: lTERRAl (臥龍光線 \|/ \|/)   2013-02-16 00:53:00
$('ida') 你是要?
作者: Vinn (Vinn)   2013-02-16 08:40:00
$('.ida')replaceWith應該是用來換掉舊的資料以呈現變化阿...影片上是這樣要教...該不會我有理解錯誤吧?
作者: johnlinvc (阿翔)   2013-02-16 11:46:00
應該是$('.ida').replaceWith('foo') ?把你的index.js.erb 改名成 show.js.erbtoys_controler 裡的 show 也 respond to js因為你的route 和那個教學的不一樣應該是你show method 裡的 toy 不是 @c_toy下次可以考慮直接丟github 再上來問
作者: hellolucky (做自己 好自在)   2013-02-16 17:13:00
照錯誤訊息 你request的是 ToysController#show不過ToysController#show 只有@toy 沒有@c_toy所以view找不到@c_toy我覺得不是Ajax難實現,而是要先學會抽絲剝繭的debug釐清問題點所在,慢慢的你會發現其實一切都有條理
作者: johnlinvc (阿翔)   2013-02-16 17:26:00
一開始就學rails remote ajax 本來就比較有難度可以先去搞懂底下的jquery 在做什麼, 還有partial的用法我發merge request 給你了:p

Links booklink

Contact Us: admin [ a t ] ucptt.com