3

我将两个本地人从一个视图 ERB 传递给一个局部。两个本地人都成功地传入了 local_assigns。但是,我只能通过局部变量名使用 FormBuilder。另一个值可在我的部分中用作 local_assigns[:disable_edits],但不能用作 disable_edits。

_form.html.erb

    <div>
    <%= f.fields_for :panels do |builder| %>
        <%= render "panel_fields", :f => builder, :disable_edits => true %>
    <% end %>
</div>

_panel_fields.html.erb

<div>
<p>
    <%= local_assigns[:disable_edits] %>
</p>
<p>
    <%#= disable_edits ? 'disable edits true' : 'disable edits false' %>
</p>
<p>
    <%= local_assigns.keys %>
</p>

local_assigns[:disable_edits] 导致显示“true”。

local_assigns.keys 导致显示“[:f, :disable_edits, :panel_fields]”。

取消注释三元语句会导致“#<#:0x4d58768> 的未定义局部变量或方法‘disable_edits’”

我遵循我所理解的最新建议的 Rails 语法,但尝试使用 :partial=>、:locals=>、:as=> 等进行操作无济于事。我也不认为我已经以任何方式将此作为可选参数,所以有很多关于使用 has_key 与 nil 进行测试的信息?没有帮助我。我的理解是 local_assigns 中的所有内容都应该像在局部变量中一样暴露为与哈希键同名的局部变量。

我现在正在使用 local_assigns[:disable_edits],但想了解正在发生的事情并更正一些事情,以便我可以使用更传统的语法。谢谢!

4

1 回答 1

0

尝试使用

render :partial => "panel_fields", :locals => {:f => builder, :disable_edits => true }
于 2012-07-08T02:09:22.747 回答