1

我有两个类(Impressions 和 Replies),它们继承自父类 Comment:

class CommentsController < ApplicationController
  . . . .
end

class ImpressionsController < CommentsController
  . . . .
end

class RepliesController < CommentsController
  . . . .
end

在我看来,我希望它们以相同的方式呈现。现在,我正在接近它:

<%= render @comment %>

理想情况下,这将呈现部分“/comments/_comment”,但 Rails 想要呈现诸如“/impressions/_impression”或“/replies/_replies”之类的东西。有什么方法可以让 Rails 强大起来做“/comments/_comment”?

4

2 回答 2

1

我认为这样的事情会有所帮助:

<%= render :partial => '/comments/comment', :collection => @impressions,
           :as => :comment %>
于 2012-11-29T03:41:46.950 回答
1

使用 :collection 可以渲染对象的集合。给定一个对象,您应该使用 :object 代替。

<%= render partial: '/comments/comment', object: @impression %>

只要将部分命名为“注释”,就不需要 :as。如果您将部分命名为“my_comment”,则可以通过局部变量“my_comment”访问@impression,并且您必须使用 :as 来定义不同的本地名称。

但是,在您的情况下,我更愿意为 Impression 和 Replies 模型定义部分路径,如下所示(Rails >3.2.?):

class Impression < ActiveRecord::Base
  ...  

  def to_partial_path
    "comments/comment"
  end
end

然后您可以对对象或集合使用标准渲染

<%= render @comment %>
于 2013-12-10T21:41:56.030 回答