在我的应用程序中,我有一个用户和故障单模式,每个用户都可以订阅许多故障单,反之亦然。
对于我从数据库中获取的每张票,我想显示是否订阅了current_user或者不是票证本身。
我的查询示例如下:
@tickets = current_user.tickets.limit(10).order('created_at DESC')
我可以使用带有Ticket模型中的连接的default_scope吗?我需要它返回一个带有简单的true或false或nil的附加字段。
谢谢。
答案 0 :(得分:0)
示例1 - 确定是否订阅了单个故障单:
ticket = Ticket.find(id)
@ticket_is_subscribed = current_user.tickets.any? { |t| t == ticket }
示例2 - 如果您只想要一个包含当前用户订阅的所有故障单ID的数组:
subscribed_ids = current_user.tickets.pluck(:id)
@ticket_is_subscribed = subscribed_ids.include?(ticket.id)
示例3 - 您可以生成一个数组数组,为每个true
提供false
或ticket.id
。
subscribed_ids = current_user.tickets.pluck(:id)
@all_subscribed_tickets = Ticket.all.pluck(:id).map { |id| [id, subscribed_ids.include?(id)] }
答案 1 :(得分:0)
这个问题有点模糊,所以我想你的情况是你获取一堆票并显示当前用户是否拥有它。如果有,显示“是”,否则显示“现在”。
您可以在Ticket中使用模型方法来判断它。
class Ticket < ActiveRecord::Base
def is_buyer?(buyer)
user == buyer ? "yes" : "no"
end
end
# In controller
@tickets = Ticket.page(1)
# In view
- @tickets.each do |ticket|
= ticket.name
= ticket.is_buyer?(current_user)