3

我有一个(多态)对象Comment(将用于VehicleReview对象)。我怎样才能得到所有commentsUsers Vehicle: @user.vehicles.comments?它说该方法comments未定义ActiveRecord::Relation。有什么简单的方法让它工作吗?是否是多对多关系:很多车辆有很多评论?还是我错了?@user.vehicles.first.comments工作正常。

对象之间的关系(不完整):

User 
has_many Vehicles. 

Vehicle 
belongs_to User. 
has_many Comments (as commentable). 

Comment 
belongs_to Commentable, :polymorphic => true
4

4 回答 4

5

它的评论部分很好。问题是 - 你在打电话:

@user.vehicles.comments

在这里,车辆是一个 AR 关系对象,它对评论一无所知。ie - @user.vehicles 是该用户的车辆集合。

要获取与用户关联的车辆的所有评论,您可以执行以下操作:

@user.vehicles.to_a.collect{|v| v.comments.to_a }.flatten

这将返回有关任何用户车辆的所有评论的数组。

于 2012-11-19T11:44:03.680 回答
2

试试这个:

在 user.rb 中写下:

    has_many :comments, :through => :vehicles

现在做

 @user.comments  

它将获取为您的车辆创建的所有评论

您还可以通过以下方式获取评论:

    @user.vehicles(:include => :comments).collect{|v| v.comments}.flatten

但在我看来,这不是正确的方法。

于 2012-11-19T12:27:44.163 回答
1

我认为您正在尝试进行复杂的关联,或者您可能误解了多态关联。它比你想象的要简单。这是您应该定义的关联:

User 
has_many vehicles 

Vehicle 
belongs_to user 
has_many comments, as: :commentable

Comment 
belongs_to :commentable, polymorphic: true

要获取用户车辆的所有评论,您可以has_many :through在用户模型中定义关联:

User 
has_many vehicles 
has_many comments, through: :vehicles

现在您可以使用@user.comments获取有关用户车辆的所有评论。

于 2012-11-19T10:37:04.947 回答
1

试试这个:

在用户模型中添加:

has_many :comments, :through => :vehicles

编辑车辆和评论:

在用户模型中:

has_many :comments, :through => :vehicles, :as => :comments_vehicles
has_many :comments, :through => :reviews, :as => :comments_reviews

def comments
  self.comments_vehicles + self.comments_reviews
end
于 2012-11-19T10:37:13.487 回答