Rails 3,将连接添加到default_scope以关联current_user

时间:2013-09-13 01:02:07

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

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

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

我的查询示例如下:

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

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

谢谢。

2 个答案:

答案 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提供falseticket.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)