【问题标题】:How does local_assigns work in Rails?local_assigns 如何在 Rails 中工作?
【发布时间】:2012-06-04 20:37:52
【问题描述】:

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

<% if local_assigns[:custom_name] %>
  <li><%= custom_name %></li>
<% else %>

或者这个:

<%= render "discussions/complementary/#{local_assigns[:action] || params[:action]}" %>

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

【问题讨论】:

    标签: ruby-on-rails views


    【解决方案1】:

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

    在这里您使用一些值渲染部分,headlineperson 将可以使用预定义的值访问。

    <%= render "shared/header", { :headline => "Welcome", :person => person } %>
    

    shared/header 视图中:

    Headline: <%= headline %>
    First name: <%= person.first_name %>
    

    您可以通过以下方式检查这些变量是否已传入:

    <% if local_assigns.has_key? :headline %>
      Headline: <%= headline %>
    <% end %>
    

    查看此文档以获取有关Passing local variables to sub templates 部分的更多详细信息。

    【讨论】:

    • 链接到 Rails 指南时,在 URL 中包含 Rails 版本会有所帮助。 Rails 4.2.0 的链接没有提到我可以告诉的 local_assigns。
    • 而不是&lt;% if local_assigns.has_key? :headline %&gt;,为什么我们不能只做&lt;% if headline %&gt;
    • @MikeC 这是因为如果标题未定义(即未传递给部分),您将收到 NameError "未定义的局部变量或方法..." 而不是错误值。跨度>
    • 那你为什么不能只做if defined? headline呢?
    • @EricAnderson 我想补充一点,local_assigns 在部分使用时更加明确和清晰。我遇到了一个令人困惑的情况,我正在测试一个名为 format 的局部变量。使用defined?( format ) 总是会通过,因为format 是一种用于字符串格式化的Ruby 方法。正是在这一点上,我们决定在测试局部变量是否存在时始终使用local_assigns。我建议你和你的人采用同样的方法。将来它可能会为您节省几分钟到几小时的心痛。
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多