将局部变量传递给已加载视图后呈现的局部变量

时间:2012-09-11 19:32:27

标签: ruby-on-rails ruby-on-rails-3.2

更新:我刚刚发现这个其他线程解释了我遇到此问题的原因(Pass local rails variable to javascript to partial),但它没有列出修复它的步骤(或者至少它跳过太多我还不知道该怎么做的步骤。)问题似乎是传递给partial的局部变量不再是new.html.erb加载后存在的同一局部变量在click事件之前,不会加载partial。有可能解决这个问题吗?谢谢。

原文:

我有一个点击事件绑定到一个链接只能在某些时间工作,我不知道为什么。在没有重新加载页面的情况下单击链接时,应该将部分渲染到我的视图中。

这是我目前拥有的(不起作用):

comps_helper.rb:

def addRound(f)
  render "add_round", f: f
end

谱曲/ new.html.erb

<div id="add_round"></div>
<%= link_to "Add round", addRoundLink_path, remote: true %>

addRoundLink.js.erb

$("#add_round").html("<%=j addRound(f) %>");

工作原理:

  1. 如果我只是使用&lt;%= addRound%&gt;直接从new.html.erb调用helper方法,它就可以了。但是我需要在点击链接时触发它,以便用户可以像他们一样在表单中添加任意数量的部分。

  2. 如果&#39; f&#39;参数不包含在上面的代码中,javascript确实可以点击。例如,如果我更改局部因此它只包含一个文本字符串,它将在单击链接时呈现该文本。这让我觉得我如何包含“f&f; javascript中的参数。但是我不确定为什么会出现这种情况,因为jn只是将该代码插回到new.html.erb中,其中我的div为&#34; add_round&#34; ID?

  3. 注意:这是我点击链接时在javascript控制台中看到的内容: GET http //0.0.0.0:3000/addRoundLink 500(内部服务器错误)
    的jquery.js:8215

    感谢。

1 个答案:

答案 0 :(得分:3)

它不起作用,因为f仅存在于您的控制器操作的上下文中。

当用户点击您的链接时,会为您的javascript发出新的HTTP请求。处理此请求的控制器操作与呈现页面的操作不同,因此您需要在此控制器操作中设置f并将其作为本地传递给addRoundLink.js.erb。

示例代码

  • 我假设f由您的模型对象/实例确定。

在您的控制器中

   def add_round
        model = MyModel.find params[:id]
        f = model.determine_f

        render :partial => 'add_round', :locals => { :f => f }
   end

在你的new.html.erb

<%= link_to "Add Round", add_round_path(@model), :remote => true %>