[问题] 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