web-dev-qa-db-fra.com

Rails - vérifie si l'enregistrement existe dans l'association has_many

Je ne suis pas sûr si ma question est formulée correctement.

J'ai trois modèles: User, Item et 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

J'ai besoin d'un moyen de voir si un utilisateur a un élément pour créer des instructions if dans mes vues d'élément. Mais voici le piège, les objets utilisateur ont enum status: [ :pending, approved]. J'ai donc besoin de voir si un current_user a un certain article :pending.

Par exemple, lorsqu'un utilisateur visite la page de visualisation de item1, je vois l'action show de item_controller declare @item = Item.find_by_id(params[:id]). Mais alors que puis-je faire avec ce @item pour voir si un utilisateur a cet élément?

9
user4584963

Essayer:

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

Ou 

current_user.items.exists?(@item.id)
22
lei liu

Mais alors que puis-je faire avec cet @item pour voir si un utilisateur a cet élément?

Je pense que ce qui vous manque ici, ce sont des méthodes modèles. Par exemple, si vous avez ajouté une méthode au modèle Item appelée Propriété_de_personnes_à_utilisateur_pendant, vous pouvez appeler @item.belongs_to_user_in_pending_state(current_user) n'importe où vous en avez besoin. 

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
tkz79