gpt4 book ai didi

ruby-on-rails - Rails local_assign 与局部变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:21 30 4
gpt4 key购买 nike

Rails guide 中学习,我不明白 local_assign 下面是如何工作的:

To pass a local variable to a partial in only specific cases use the local_assigns.

  • index.html.erb

    <%= render user.articles %>
  • show.html.erb

    <%= render article, full: true %>
  • _articles.html.erb

    <h2><%= article.title %></h2>

    <% if local_assigns[:full] %>
    <%= simple_format article.body %>
    <% else %>
    <%= truncate article.body %>
    <% end %>

This way it is possible to use the partial without the need to declare all local variables.

当它的名称为 _articles 时,show Action 如何呈现部分,它只会显示 index Action ?我也不明白您为什么要使用添加 full: true 选项,而您本可以使用 locals: {full:true}。有什么区别?

最佳答案

关于local_assigns的使用:

指南这一部分的重点是展示如何在您的部分中访问可选局部变量。如果局部变量名称 full 可能或可能不 在您的局部变量中定义,则在未定义局部变量时简单地访问 full 将导致错误.

optional locals 你有两个选择:

首先,使用 local_assigns[:variable_name],当未提供指定的局部变量或变量的值时,它将是 nil

其次,您可以使用 defined?(variable_name),当变量未定义时将为 nil,或者为真(字符串 "local_variable") 当本地定义时。

使用 defined? 只是防止访问 undefined variable ,您仍然必须实际访问变量以获取其值:

  • if local_assigns[:full]
  • if defined?(full) && full

至于您的具体问题:

How is the partial even being rendered by the show action when it has the name _articles, which will only show for the index action?

This is a typo .正确的部分名称是 _article.html.erb。无论是 index 还是 show 操作,正确的部分名称都是模型的单数。在呈现模型集合的情况下(如 index.html.erb 中),部分仍应单独命名。

I also don't see why you use add the option of full: true when you could have just used locals: {full:true}. What's the difference?

重点是 full: true 语法更短。您有两个相同的选项:

  • 渲染部分:@article, locals: { full: true }
  • 渲染@article,完整:true

第二个明显更短且冗余更少。

关于ruby-on-rails - Rails local_assign 与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028592/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com