如何让一个变量从一个控制器到一个js文件,再到一个渲染的分部

How to have a variable persist from a controller, to a js file, to a rendered partial

本文关键字:一个 控制器 变量 js 文件      更新时间:2024-05-30

我正在使用ajax和jQuery呈现部分viewer。我想根据点击的链接在分部中设置一个变量。

ERB:

<%=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,它始终使用模型的:idModel.find_by_idModel.find_by(id: :id)

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

@painting = Painting.find(:id)

不过,您是对的,实例变量(@painting)在部分中是可用的。