如何让变量从控制器持续到 js 文件,再到呈现的部分
How to have a variable persist from a controller, to a js file, to a rendered partial
我正在使用 ajax 和 jQuery 渲染部分 viewer
。我想根据单击的 link 在局部中设置一个变量。
雇员再培训局:
<%=link_to "link1", viewer_path(id: Painting.first), remote: true%>
<%=link_to "link2", viewer_path(id: Painting.last), remote: true%>
控制器:
def viewer
@painting = Painting.find_by(:id)
respond_to do |format|
format.html { redirect_to root_path }
format.js
end
end
viewer.js.erb
$("#viewer").html("<%= escape_javascript(render 'viewer') %>");
_viewer.html.erb
<%= @painting.name %>
但是在渲染部分时变量 @painting
没有设置,所以我得到一个错误。
在控制器中定义变量不应该将值传递给部分吗?我做错了什么?
这可能是您的问题:使用 Model.find_by
时,您需要指定查找依据。尝试使用 Model.find
,它总是使用模型的 :id
,或 Model.find_by_id
或 Model.find_by(id: :id)
。
在控制器中进行此更新#viewer:
@painting = Painting.find(:id)
不过你是对的,实例变量 (@painting
) 可用于局部变量。
我正在使用 ajax 和 jQuery 渲染部分 viewer
。我想根据单击的 link 在局部中设置一个变量。
雇员再培训局:
<%=link_to "link1", viewer_path(id: Painting.first), remote: true%>
<%=link_to "link2", viewer_path(id: Painting.last), remote: true%>
控制器:
def viewer
@painting = Painting.find_by(:id)
respond_to do |format|
format.html { redirect_to root_path }
format.js
end
end
viewer.js.erb
$("#viewer").html("<%= escape_javascript(render 'viewer') %>");
_viewer.html.erb
<%= @painting.name %>
但是在渲染部分时变量 @painting
没有设置,所以我得到一个错误。
在控制器中定义变量不应该将值传递给部分吗?我做错了什么?
这可能是您的问题:使用 Model.find_by
时,您需要指定查找依据。尝试使用 Model.find
,它总是使用模型的 :id
,或 Model.find_by_id
或 Model.find_by(id: :id)
。
在控制器中进行此更新#viewer:
@painting = Painting.find(:id)
不过你是对的,实例变量 (@painting
) 可用于局部变量。