Rails - 检查has_many association

时间:2016-04-08 02:36:29

标签: ruby-on-rails activerecord associations 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

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

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

4 个答案:

答案 0 :(得分:24)

尝试:

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

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

答案 1 :(得分:0)

  

但是我可以用@item做些什么来查看用户是否有这个项目?

我认为你在这里缺少的是模型方法。例如,如果您向名为belongs_to_user_in_pending_state的Item模型添加了一个方法,则可以在任何需要的地方调用<local:MyUserControl EllipseFill="Red"/>

@item.belongs_to_user_in_pending_state(current_user)

答案 2 :(得分:0)

在这里扩展@ lei-liu的答案。您可以通过current_user.items.exists?(params[:id])

查找记录是否存在于众多记录中。

同时,exists?允许一个人过滤除id之外的列,还允许更复杂的条件,如下所示:

current_user.items.exists?('id > 3')
current_user.items.exists?(name: 'some_name')

答案 3 :(得分:-1)

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? 
  ...