Rails local_assign与局部变量

sta*_*lei 3 ruby ruby-on-rails local

Rails指南中学习,我不明白local_assign下面的工作原理:

要仅在特定情况下将局部变量传递给局部变量,请使用local_assigns.

这样就可以使用partial而无需声明所有局部变量.

当show动作具有名称时_articles,部分甚至会被show动作呈现,该名称仅显示索引动作?我也不明白为什么你使用时添加full: true你刚才使用的选项locals: {full:true}.有什么不同?

mea*_*gar 6

关于使用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.

第二个是明显更短,更少冗余.