sta*_*lei 3 ruby ruby-on-rails local
从Rails指南中学习,我不明白local_assign
下面的工作原理:
要仅在特定情况下将局部变量传递给局部变量,请使用local_assigns.
index.html.erb
Run Code Online (Sandbox Code Playgroud)<%= render user.articles %>
show.html.erb
Run Code Online (Sandbox Code Playgroud)<%= render article, full: true %>
_articles.html.erb
Run Code Online (Sandbox Code Playgroud)<h2><%= article.title %></h2> <% if local_assigns[:full] %> <%= simple_format article.body %> <% else %> <%= truncate article.body %> <% end %>
这样就可以使用partial而无需声明所有局部变量.
当show动作具有名称时_articles
,部分甚至会被show动作呈现,该名称仅显示索引动作?我也不明白为什么你使用时添加full: true
你刚才使用的选项locals: {full:true}
.有什么不同?
关于使用local_assigns
:
本指南的这一部分旨在说明如何访问部分中的 可选本地.如果局部变量名full
可能在您的局部内部定义,也可能没有定义,只需在未定义局部的情况下访问full
就会导致错误.
您有两个可选本地选项:
首先,使用local_assigns[:variable_name]
,nil
当未提供指定的本地时,或变量的值.
其次,你可以使用defined?(variable_name)
,这将是nil
在没有定义的变量,或truthy(串"local_variable"
)的地方时,被定义.
使用defined?
只是防止访问未定义的变量,您仍然必须实际访问该变量以获取其值:
if local_assigns[:full]
if defined?(full) && full
至于你的具体问题:
当show动作具有名称_articles时,部分甚至会被show动作呈现,它只会显示索引动作?
这是一个错字.正确的部分名称是_article.html.erb
.无论动作如何,index
或者show
,正确的部分名称是模型的单数.在渲染模型集合的情况下(如在index.html.erb中),部分仍应单独命名.
我也不明白为什么你使用时添加
full: true
你刚才使用的选项locals: {full:true}
.有什么不同?
关键是full: true
语法更短.你有两个相同的选择:
render partial: @article, locals: { full: true }
要么render @article, full: true
.第二个是明显更短,更少冗余.
归档时间: |
|
查看次数: |
1800 次 |
最近记录: |