【问题标题】:Rails form partial that is called via AJAX request is not loading controller variable通过 AJAX 请求调用的 Rails 表单部分未加载控制器变量
【发布时间】:2014-09-15 15:05:23
【问题描述】:

正如标题所说,我正在尝试使用 AJAX 请求加载部分表单;我表单中的一个字段需要控制器中的变量,以便它可以创建选择下拉菜单。如果我直接在视图中渲染部分,它可以很好地访问变量但是当我分离部分并尝试通过 AJAX 请求加载它时,它不知道如何找到变量。

我已经尝试按照答案found here(将其作为局部变量提供给部分)但它仍然不起作用。

@headers 是未加载的变量。

部分

= simple_form_for(Constraint.new, html: {:multipart => true, autocomplete: "off", :class=> "form-horizontal" }, remote: true, :authenticity_token => true) do |f|
  div.profile-details
    br
    = f.select :header, @headers.each{|header|} , input_html:{:class => "user-update"}, label: "Header", :prompt   => "Select a Header"
    br
    = f.button :submit, "Save Constraint"

加载部分的.js 文件

$(".newConditionContainer").append('<%= escape_javascript(render 'projects/rulesConstraintsInput')%>');

更新

我最终在调用 js 请求的控制器方法中定义了变量。我之前假设该变量是可访问的,但它只是在局部之外的方法中定义的。

【问题讨论】:

    标签: jquery ruby-on-rails ajax renderpartial


    【解决方案1】:

    部分需要以下划线开头,因此将其命名为 _partial_name.html.erb 然后你可以像这样使用渲染引用一个局部变量并传递你喜欢的任何局部变量

    <%= render partial: "partial_name", locals: {headers: @headers} %>
    

    现在,标题将作为局部变量中的本地变量提供。 只需将@headers 更改为标题

    干杯

    【讨论】:

    • 这是我尝试过的答案,但它似乎仍然不起作用。如果这有助于解释它,我的部分在一个单独的文件中。它只是尝试查找标头变量并说“NoMethodError - nil:NilClass 的未定义方法 `each'”。
    • 如果您的 .js 文件存储在您的控制器中,它如何访问 @headers 变量?
    • 这基本上是我的问题。访问该变量的最佳方式是什么?
    • 我能想到的几种方法。一个隐藏的输入元素,您将值设置为标题 var 并使用 JS 检索它。或者您可以使用像 Handlebars.js 这样的模板引擎,您将能够生成一段可重用的 html,并且您可以在渲染视图时从控制器中为其提供变量。
    • 感谢您的帮助——我最终只是在调用 js 请求的控制器方法中定义了所述变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多