0

在我的应用程序中,我有一个用户和工单的模式,每个用户都可以订阅许多工单,反之亦然。

对于我从数据库中获取的每张票,我想显示 current_user 是否订阅了票本身。

我的查询示例如下:

@tickets = current_user.tickets.limit(10).order('created_at DESC')

我可以使用带有 Ticket 模型中的连接的 default_scope 来做到这一点吗?我需要它返回一个带有简单 true 或 false 或 nil 的附加字段。

谢谢你。

4

2 回答 2

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)
于 2013-09-13T04:53:33.767 回答
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 - 您可以生成一个数组数组,为您提供truefalse为每个ticket.id.

subscribed_ids = current_user.tickets.pluck(:id)
@all_subscribed_tickets = Ticket.all.pluck(:id).map { |id| [id, subscribed_ids.include?(id)] }
于 2013-09-13T01:09:05.943 回答