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_counterdiscount_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