Rails 6 - 传递给局部变量时未定义的局部变量,但当我将调试器放入 erb 文件时定义了它
Rails 6 - undefined local variable when passed to a partial but it is defined when I put a debugger in the erb file
我正在将一个集合传递给一个部分:
<%= render partial: "discount_rule", collection: @programs.discount_rules, locals: { f: form } %>
局部变量f
成功传递给partial.
我在partial中打印出我可用的局部变量:
<%= pp local_variables %>
我得到的结果是:
[:local_assigns, :output_buffer, :discount_rule, :discount_rule_counter, :discount_rule_iteration, :f]
我将添加调试器:
<% debugger %>
在终端中输入 discount_rule
并获得具有字段 name
.
的正确对象
我将调试器替换为:
<%= discount_rule.name %>
所以它与调试器在同一范围内。我得到:
undefined local variable or method `discount_rule' for #<ActionView::Base:0x000000000078c8>
没有语法错误。我还尝试了 discount_rule_counter
和 discount_rule_iteration
并从集合中重命名变量名称(使用 as:variable_name)并得到未知的局部变量或方法错误。我试过不使用集合,只是渲染部分并在每个循环中传递变量。同样的错误。我做错了什么?
这是一个 Rails API 唯一的应用程序,我必须稍作更改才能拥有一个页面。
您应该使用 local_assigns[:discount_rule]
来访问局部变量。
也可以使用 collection: @programs.discount_rules, as: :discount_rule
并在视图中调用 discount_rule
。
同时确保控制器中的数据不为零,并且您能够打印所需的属性(如名称),然后再使用 .each do |instance| p.name
之类的东西将其传递给 partial
我正在将一个集合传递给一个部分:
<%= render partial: "discount_rule", collection: @programs.discount_rules, locals: { f: form } %>
局部变量f
成功传递给partial.
我在partial中打印出我可用的局部变量:
<%= pp local_variables %>
我得到的结果是:
[:local_assigns, :output_buffer, :discount_rule, :discount_rule_counter, :discount_rule_iteration, :f]
我将添加调试器:
<% debugger %>
在终端中输入 discount_rule
并获得具有字段 name
.
我将调试器替换为:
<%= discount_rule.name %>
所以它与调试器在同一范围内。我得到:
undefined local variable or method `discount_rule' for #<ActionView::Base:0x000000000078c8>
没有语法错误。我还尝试了 discount_rule_counter
和 discount_rule_iteration
并从集合中重命名变量名称(使用 as:variable_name)并得到未知的局部变量或方法错误。我试过不使用集合,只是渲染部分并在每个循环中传递变量。同样的错误。我做错了什么?
这是一个 Rails API 唯一的应用程序,我必须稍作更改才能拥有一个页面。
您应该使用 local_assigns[:discount_rule]
来访问局部变量。
也可以使用 collection: @programs.discount_rules, as: :discount_rule
并在视图中调用 discount_rule
。
同时确保控制器中的数据不为零,并且您能够打印所需的属性(如名称),然后再使用 .each do |instance| p.name