Rails – 检查has_many关联中是否存在记录

我不确定我的问题措辞是否正确。

我有三个模型: UserItemUserItem

 user has_many :user_items user has_many :items, through :user_items item has_many :user_items item has_many :users -> {uniq}, through :user_items item belongs_to :user user_item belongs_to :user user_item belongs_to :item 

我需要一种方法来查看用户是否有一个项目来制作我的项目视图中的语句但是这里是catch,user_items具有enum status: [ :pending, approved] 。 所以我需要查看current_user是否具有某个:pending项。

例如,当用户访问item1的视图页面时,我有item_controller的show动作声明@item = Item.find_by_id(params[:id]) 。 但是,我可以用这个@item来查看用户是否有这个项目?

尝试:

 current_user.items.exists?(params[:id]) 

要么

 current_user.items.exists?(@item.id) 

但是,我可以用这个@item来查看用户是否有这个项目?

我想你在这里缺少的是模型方法。 例如,如果您向Item模型添加了一个名为belongs_to_user_in_pending_state的方法,则可以在任何需要的地方调用@item.belongs_to_user_in_pending_state(current_user)

 def belongs_to_user_in_pending_state(user) if self.user_items.pending.select {|s| s.user == user}.count > 0 return true else return false end end 

1)将范围添加到User_item类

 scope :pending, -> {where status: 'pending'} 

2)在Item类的实例方法中使用该范围:

 def is_pending_with_someone? self.user_items.pending.count > 0 end 

然后你可以使用

 if @item.is_pending_with_someone? ...