local_assigns如何在Rails中工作?

Lee*_*lly 50 views ruby-on-rails

我一直在谷歌搜索这个,找不到正确的道路.我正在使用一个名为local_assigns的方法的Rails应用程序.这似乎是Rails或gem中的一些东西,并不是我的应用程序特有的,但它用于在不同的上下文中呈现部分,例如:

<% if local_assigns[:custom_name] %>
  <li><%= custom_name %></li>
<% else %>
Run Code Online (Sandbox Code Playgroud)

或者这个:

<%= render "discussions/complementary/#{local_assigns[:action] || params[:action]}" %>
Run Code Online (Sandbox Code Playgroud)

这是Rails方法吗?我在哪里可以找到更多关于此的文档?

Cha*_*nap 71

local_assigns 是一个Rails视图助手方法,您可以检查此部分是否已提供局部变量.

在这里,您可以使用某些值渲染部分值,headline并且person可以使用预定义值访问该值.

<%= render "shared/header", { :headline => "Welcome", :person => person } %>
Run Code Online (Sandbox Code Playgroud)

shared/header视图中:

Headline: <%= headline %>
First name: <%= person.first_name %>
Run Code Online (Sandbox Code Playgroud)

以下是检查这些变量是否传入的方法:

<% if local_assigns.has_key? :headline %>
  Headline: <%= headline %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

有关将局部变量传递给子模板部分的更多详细信息,请查看此文档.

  • @MikeC这是因为如果标题是未定义的(即未传递给部分标题),您将获得一个NameError"未定义的局部变量或方法......"而不是假值. (8认同)
  • @EricAnderson 我想补充一点,当在部分中使用时,`local_assigns` 更加明确和清晰。我遇到了一个令人困惑的情况,我正在以“格式”的名称测试局部。使用 `defined?( format )` 总是会通过,因为 `format` 是一种用于字符串格式化的 Ruby 方法。正是在这一点上,我们决定在测试局部变量中是否存在局部变量时始终使用“local_assigns”。我建议你和你的采用相同的。它可能会在未来为您节省几分钟到几小时的心痛。 (3认同)
  • 而不是`&lt;% if local_assigns.has_key?:headline %&gt;`,为什么我们不能只做 `&lt;% if header %&gt;`? (2认同)