Rails local_assign与局部变量

时间:2017-02-03 16:19:12

标签: ruby-on-rails ruby local

Rails guide学习,我不明白public class Example { private String last_question; private String level; private String error; //all getter andd setter are is here } 如何在下面工作:

  

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

     
      
  • index.html.erb

    local_assign
  •   
  • show.html.erb

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

    <%= render article, full: true %>
    
  •   
     

这样就可以在不需要声明的情况下使用partial   所有局部变量。

当show动作名称为<h2><%= article.title %></h2> <% if local_assigns[:full] %> <%= simple_format article.body %> <% else %> <%= truncate article.body %> <% end %> 时,部分甚至会被show动作呈现,只显示索引动作?当您刚刚使用_articles时,我也不明白为什么使用添加full: true选项的原因。有什么区别?

1 个答案:

答案 0 :(得分:5)

关于struct _list_cell_t的使用:

本指南的这一部分旨在说明如何访问部分中的可选本地人。如果局部变量名local_assigns可能或可能不在您的部分内部定义,则只需访问full将导致在未定义本地时出错。

可选本地人有两种选择:

首先,使用full,在未提供指定的本地时为local_assigns[:variable_name],或变量的值。

其次,当未定义变量时,您可以使用nil,当本地 时,可以使用真实(字符串defined?(variable_name))定义

使用nil只是防止访问未定义的变量,您仍然必须访问变量才能获取其值:

  • "local_variable"
  • defined?

至于你的具体问题:

  

当show动作的名称为_articles时,部分甚至是如何呈现的,这只会显示索引动作?

This is a typo。正确的部分名称是if local_assigns[:full]。无论操作if defined?(full) && full_article.html.erb如何,正确的部分名称都是模型的单数。在渲染模型集合的情况下(如在index.html.erb中),部分仍应单独命名。

  

当您刚刚使用index时,我也不明白为什么使用添加show选项的原因。有什么区别?

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

  • locals: {full:true}
  • full: true

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