我有一个Devise使用的具有以下关系的用户类
class User
has_many :listings, dependent: :delete
has_many :favorites, :class_name => 'Listing', as: :favorites, dependent: :delete
列表类
class Listing
belongs_to :user
belongs_to :favorites, :class_name => 'User', :inverse_of => :favorites
我可以推current_user.listings << listing
,但我无法推current_user.favorites << listing
推送似乎很好,不会抛出任何错误,但是当我要求current_user.favorites时,我得到0结果。
我想知道我是否正确设置了这种关系?
答案 0 :(得分:1)
更新:
您需要添加名为Favorite
的新模型并包含2个字段:listing_id
和user_id
,因为用户和收藏夹之间的关系是多对多。
或者,您需要将Listing
模型中的收藏类型更改为Array
,如下所示:
field :favorites, type: Array
另外,删除has_many :favorites ...
模型中的User
并添加一个getter方法:
def favorites
Listing.where(favorites: self.id)
end
和一个setter方法:
def favorites=(listing)
Listing.find(listing.id).add_to_set(favorites: self.id)
end