我有一个评论模型,我已经看到了使用@comment, :comment, comment
来引用MVC中的对象的示例。我怎么知道哪个是哪个?有区别吗?
答案 0 :(得分:4)
@comment
是指Rails控制器可用于视图的实例变量。这是最常见的用法:comment
是一个Ruby符号,在需要模型的 name 时使用。您通常会看到使用form_for
帮助程序和Rails提供的其他视图帮助程序 comment
是一个局部变量。当视图模板使用partial template(仅称为部分)时,您通常会在Rails中看到这一点。父视图模板将一个或多个实例变量传递给partial,以便partial可以访问它/它们,如:
<%= render :partial => 'comment', :locals => { :comment => @comment } %>
- 在此示例中,注释partial(comment.html.erb
)可以通过@comment
局部变量访问comment
实例变量,因此它可以执行comment.author
等操作
答案 1 :(得分:2)
这实际上取决于背景。
第一个,@comment
通常用于(如John Topley所述)用于设置一个变量,该变量将在请求链中传递给您从该操作呈现的视图,助手和部分。
如果您在form_for
中使用它,则会引用您最有可能在控制器中设置的@comment
对象:
<% form_for @comment do |f| %>
如果您将注释对象作为局部传递给局部,则可以将其指定为符号(如John Topley所说):
<%= render :partial => "info", :locals => { :comment => @comment }
如果您将其用作局部变量,则可能会呈现一组注释:
<%= render :partial => @post.comments %>
将comments
集合传递给partial将对此处的第一个对象进行内省,并确定它属于Comment
类,因此将尝试呈现 comments / _comment.html.erb 部分为集合中的每个项目(无论其他项目是什么类型,这都是一个问题),使它们在comment
内部可用。