Ответ 1
Try:
current_user.items.exists?(params[:id])
Или
current_user.items.exists?(@item.id)
Я не уверен, правильно ли сформулирован мой вопрос.
У меня есть три модели: User
, Item
и 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
Мне нужно выяснить, есть ли у пользователя элемент для создания операторов if
в представлениях моих позиций. Но здесь catch, user_items имеют enum status: [ :pending, approved]
. Поэтому мне нужно увидеть, есть ли current_user
элемент :pending
.
Например, когда пользователь посещает страницу просмотра item1, у меня появляется действие show_controller show declare @item = Item.find_by_id(params[:id])
. Но что я могу сделать с этим @item
, чтобы узнать, есть ли у пользователя этот элемент?
Try:
current_user.items.exists?(params[:id])
Или
current_user.items.exists?(@item.id)
Но что же мне делать с этим @item, чтобы узнать, есть ли у пользователя этот элемент?
Я думаю, что вам не хватает здесь модельных методов. Например, если вы добавили метод в модель Item с именем belongs_to_user_in_pending_state, вы могли бы вызвать @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')
1) Добавить область в класс User_item
scope :pending, -> {where status: 'pending'}
2) Используйте эту область в методе экземпляра класса Item:
def is_pending_with_someone?
self.user_items.pending.count > 0
end
Затем вы можете использовать
if @item.is_pending_with_someone?
...