Rails local_assign 对比局部变量
Rails local_assign vs. local variables
向 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 操作如何渲染它,它只会显示 index 操作?我也不明白你为什么要使用 full: true
添加选项,而你本可以使用 locals: {full:true}
。有什么区别?
关于local_assigns
的使用:
本指南这一部分的重点是展示如何在您的部分中访问 可选 局部变量。如果局部变量名称 full
可能 或可能不会 在您的局部变量中定义,则在未定义局部变量时简单地访问 full
将导致错误。
你有两个选择 可选 locals:
首先,使用 local_assigns[:variable_name]
,如果未提供指定的局部变量,它将是 nil
,或者变量的值。
其次,您可以使用 defined?(variable_name)
,当未定义变量时将为 nil
,或者当本地 为真时(字符串 "local_variable"
) 已定义。
使用 defined?
只是防止访问未定义的变量,您仍然必须实际 访问 变量以获取其值:
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
语法更短。您有两个相同的选项:
render partial: @article, locals: { full: true }
或
render @article, full: true
.
第二个明显更短且冗余更少。
向 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 操作如何渲染它,它只会显示 index 操作?我也不明白你为什么要使用 full: true
添加选项,而你本可以使用 locals: {full:true}
。有什么区别?
关于local_assigns
的使用:
本指南这一部分的重点是展示如何在您的部分中访问 可选 局部变量。如果局部变量名称 full
可能 或可能不会 在您的局部变量中定义,则在未定义局部变量时简单地访问 full
将导致错误。
你有两个选择 可选 locals:
首先,使用 local_assigns[:variable_name]
,如果未提供指定的局部变量,它将是 nil
,或者变量的值。
其次,您可以使用 defined?(variable_name)
,当未定义变量时将为 nil
,或者当本地 为真时(字符串 "local_variable"
) 已定义。
使用 defined?
只是防止访问未定义的变量,您仍然必须实际 访问 变量以获取其值:
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 usedlocals: {full:true}
. What's the difference?
重点是 full: true
语法更短。您有两个相同的选项:
render partial: @article, locals: { full: true }
或render @article, full: true
.
第二个明显更短且冗余更少。