0

私のアプリには、ユーザーとチケットのスキーマがあり、各ユーザーは多くのチケットにサブスクライブでき、その逆も可能です。

データベースから取得したチケットごとに、current_user がチケット自体に登録されているかどうかを表示したいと考えています。

私のクエリの例は次のとおりです。

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

チケット モデルの結合で default_scope を使用して実行できますか?単純な true または false、または nil の追加フィールドを返す必要があります。

ありがとうございました。

4

2 に答える 2

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)

例 3true - or falsefor eachを与える配列の配列を生成できます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 に答える
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 に答える