[英]Polymorphic Association with same model Ruby on Rails 4
因此,我有一个应用程序,用户可以在其中创建汽车。 他们也可以喜欢汽车,而我想两者之间建立联系。 他们创造的汽车属于他们,而喜欢的汽车则通过喜欢它们的上下文属于他们。 为此,我建立了如下关联:
用户协会:
class User < ActiveRecord::Base
has_many :cars
has_many :cars, -> {distinct}, through: :likes
end
汽车协会:
class Car < ActiveRecord::Base
belongs_to :users
has_many :likes
has_many :users, -> { distinct }, through: :likes
end
像协会:
class Like < ActiveRecord::Base
belongs_to :user
belongs_to :car
end
问题是,在我让用户has_many汽车通过类似的关系声明之前。 我曾经能够调用@ user.cars,它将显示用户的汽车。 现在,它返回用户喜欢的汽车的集合。 我需要每个集合的方法。
当我尝试时: User.likes.cars
我得到一个
没有方法错误
并且控制台日志会浏览“喜欢”记录,即使我的“喜欢”记录中有一个car_id字段,它也不会返回汽车。
我看过很多问题,但难以理解。 我也尝试过在模型中定义方法,但似乎没有任何效果。 任何帮助表示赞赏。
我将如何更改关联,以便对User.cars(用于用户创建的汽车)和User.likes.cars(对于用户喜欢的汽车)进行查询?
因此,奥列格(Oleg)的以下回答无法完全发挥作用,但却引导我朝着正确的方向前进。 谢谢! 我首先按照上述示例进行操作:
class User < ActiveRecord::Base
has_many :cars
has_many :car_likes, -> {distinct}, class_name: 'Car', through: :likes
end
class Car < ActiveRecord::Base
belongs_to :users
has_many :likes
has_many :user_likes, -> { distinct }, class_name: 'User', through: :likes
end
这在控制台中返回以下错误:
ActiveRecord :: HasManyThroughSourceAssociationNotFoundError:在模型Like中找不到源关联“ car_likes”或:car_like。 尝试'has_many:car_likes,:through =>:likes,:source =>'。 是用户还是汽车之一?
所以我将其更改为:
class User < ActiveRecord::Base
has_many :cars
has_many :car_likes, -> {distinct}, through: :likes, source: :cars
end
Car Association:
class Car < ActiveRecord::Base
belongs_to :users
has_many :likes
has_many :user_likes, -> { distinct }, through: :likes, source: :users
end
现在适用于两种型号! 谢谢,希望对其他有相同问题的人有所帮助。
has_many :cars, -> {distinct}, through: :likes
覆盖has_many :cars
因为它重新定义了User.cars
。 请尝试以下操作:
class User < ActiveRecord::Base
has_many :cars
has_many :car_likes, -> {distinct}, class_name: 'Car', through: :likes
end
Car Association:
class Car < ActiveRecord::Base
belongs_to :users
has_many :likes
has_many :user_likes, -> { distinct }, class_name: 'User', through: :likes
end
#To get them, instead of user.likes.cars
@user.car_likes
@car.user_likes
如果问题仍然存在,请告诉我。 可能还有另一个错误。
我看不到您在哪里将任何模型定义为多态的。
过去,我做过这样的事情:实际上,我是为标签/标签做的,并让用户“喜欢”一个标签,将其应用于另一个实例。 这是一个临时修改,我可能错过了一些东西,但这是多态关联的一个非常普遍的用例。
class Like < ActiveRecord::Base
belongs_to :likeable, polymorphic: true
...
end
class Liking < ActiveRecord::Base
belongs_to :like
belongs_to :likeable, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :likings, :as => :likeable
has_many :likes, -> { order(created_at: :desc) }, :through => :taggings
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.