我有一个评论模型,在我的观点中使用什么? @评论,评论或评论?

时间:2010-03-24 08:19:41

标签: ruby-on-rails ruby activerecord

我有一个评论模型,我已经看到了使用@comment, :comment, comment来引用MVC中的对象的示例。我怎么知道哪个是哪个?有区别吗?

2 个答案:

答案 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内部可用。