0

has_manyの予定のリストなどの詳細を取得するために、予約モデルにクエリを実行しています。

これを行うために、私はスコープを使用しています:

scope :current_cart, 
Booking.includes(:appointments).where(:parent_id => 1).where(:complete =>nil).order("created_at DESC").limit(1)

次に、ビューで:

<%  @booking.appointments.each do |appointment| %>
  # info output
<% end %>

これを機能させるには、コントローラーで次のことを行う必要があります。

@booking = Booking.current_cart[0]

気になるのは[0]ビットです。コレクションを返したいメソッドを使用していると思います。つまり、最初の(唯一の)レコードが必要であると述べなければなりません。メンバーをフェッチするのにより適切な同様のスコープをどのように述べることができますか?

4

2 に答える 2

1

スコープの最後に「.first」を付けてみてください。スコープは通常のARELクエリであるため、通常どおりに任意の標準メソッドを使用できます。

于 2013-01-03T02:15:48.347 に答える
0

スコープに.firstまたは[0]を追加すると、エラーが発生します。

undefined method `default_scoped?' for

これを与えたグーグル:
未定義のメソッド `default_scoped? ' スコープにアクセスしている間

したがって、明らかに.firstまたは[0]を追加すると、チェーン可能でなくなるため、エラーが発生します。その答えを使用して、私はしました:

  scope :open_carts, 
   Booking.includes(:appointments).where(:parent_id => 1)
   .where(:complete =>nil).order("created_at DESC")

  def self.current_cart
   open_carts.first
  end

少し厄介ですが、モデルを混乱させたほうがいいので、見るのは無意味ではありません。

于 2013-01-03T02:26:25.883 に答える