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?
Essayer:
current_user.items.exists?(params[:id])
Ou
current_user.items.exists?(@item.id)
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