Rails - check if record exists in has_many association

后端 未结 4 1761
滥情空心
滥情空心 2021-01-01 13:33

I\'m not sure if my question is worded correctly.

I have three models: User, Item, and UserItem.

user has_many         


        
相关标签:
4条回答
  • 2021-01-01 14:07

    Try:

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

    Or

    current_user.items.exists?(@item.id)
    
    0 讨论(0)
  • 2021-01-01 14:09

    But then what can I do with this @item to see if a user has this item?

    I think what you are missing here is model methods. For example, if you added a method to the Item model called belongs_to_user_in_pending_state, you'd be able to call @item.belongs_to_user_in_pending_state(current_user) anywhere you need it.

    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
    
    0 讨论(0)
  • 2021-01-01 14:13

    Extending @lei-liu's answer here. One can find if the record exists among the many or not, through: current_user.items.exists?(params[:id])

    At the same time, exists? allows one to filter through the columns besides id, and also allows for more complicated conditions, like the following:

    current_user.items.exists?('id > 3')
    current_user.items.exists?(name: 'some_name')
    
    0 讨论(0)
  • 2021-01-01 14:29

    1) Add a scope to User_item class

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

    2) Use that scope in an instance method of Item class:

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

    Then you can use

    if @item.is_pending_with_someone? 
      ...
    
    0 讨论(0)
提交回复
热议问题