私の質問が正しく表現されているかどうかわかりません。
User
、Item
、およびUserItem
の3つのモデルがあります。
_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
ステートメントを作成するためのアイテムを持っているかどうかを確認する方法が必要ですが、ここで注意してください。user_itemsには_enum status: [ :pending, approved]
_があります。したがって、_current_user
_に特定の_:pending
_アイテムがあるかどうかを確認する必要があります。
たとえば、ユーザーがitem1のビューページにアクセスすると、item_controllerのshowアクションで@item = Item.find_by_id(params[:id])
を宣言します。しかし、ユーザーがこのアイテムを持っているかどうかを確認するには、この_@item
_で何ができますか?
試してください:
current_user.items.exists?(params[:id])
または
current_user.items.exists?(@item.id)
しかし、ユーザーがこのアイテムを持っているかどうかを確認するには、この@itemで何ができますか?
ここで不足しているのは、モデルメソッドだと思います。たとえば、belongs_to_user_in_pending_stateというメソッドをItemモデルに追加した場合、必要な場所で@item.belongs_to_user_in_pending_state(current_user)
を呼び出すことができます。
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
@ lei-liuの答えをここに拡張します。 current_user.items.exists?(params[:id])
を介して、レコードが多数の中に存在するかどうかを確認できます。
同時に、 exists?
を使用すると、id
以外の列をフィルタリングできます。また、次のようなより複雑な条件も許可されます。
current_user.items.exists?('id > 3')
current_user.items.exists?(name: 'some_name')