Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails - check if record exists in has_many association

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

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

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 

I need a way to see if a user has an item to make if statements in my item views But here's the catch, user_items have enum status: [ :pending, approved]. So I need to see if a current_user has a certain :pending item.

For example when a user visits item1's view page I have the item_controller's show action declare @item = Item.find_by_id(params[:id]). But then what can I do with this @item to see if a user has this item?

like image 211
user4584963 Avatar asked Apr 08 '16 02:04

user4584963


2 Answers

Try:

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

Or

current_user.items.exists?(@item.id) 
like image 84
lei liu Avatar answered Sep 23 '22 19:09

lei liu


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') 
like image 32
Arslan Ali Avatar answered Sep 22 '22 19:09

Arslan Ali