如何让变量从控制器持续到 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_idModel.find_by(id: :id)

在控制器中进行此更新#viewer:

@painting = Painting.find(:id)

不过你是对的,实例变量 (@painting) 可用于局部变量。