0

私は注文と飲み物の 2 つのクラスを持っています。Orders テーブルには、作成時に正しく入力される飲料 ID フィールドがあります。

ただし、ID だけでなく、Orders#index に表示する飲料の名前を取得するのに本当に苦労しています。私は本当に物事を複雑にしすぎているように感じます.レールでこれ(基本的な機能)を機能させる最もクリーンな方法は何ですか?

コントローラ:

  def index
    @orders = Order.all
    @beverage = Order.beverage.find(params[:beverage_id])
  end

意見

  - @orders.each do |order|
    %tr
      %td
        = order.created_at
      %td
        = order.orderable_type
      %td
        = order.quantity
        = order.beverage.name

現時点では、それは私に与えるだけです

未定義のメソッド `beverage' for #

私はどこかで何か間違ったことをしましたか?

4

2 に答える 2

1

ガブリエルが提案したようにモデルをセットアップしたら、次のことができます。

@orders = Order.includes(:beverage)
# retrieves all orders, including their beverage
# then you can loop through them like you did before

また:

@beverage = Beverage.includes(:orders).find(params[:id])
# retrieves a specific beverage + all its orders
于 2013-02-15T12:33:29.987 に答える
1

私は注文と飲み物の 2 つのクラスを持っています。

あなたが持っている必要があります:

  • 飲料 has_many :orders
  • 注文の所属先:bavarage

したがって、クラスはおそらく間違った方法で設定されています。あなたは何かを持っている必要があります。

 class Beverage < ActiveRecord::Base
   has_many :orders   
 end

 class Order < ActiveRecord::Base
   belongs_to :beverage
 end

そうでなければ、order.beverage.nameうまくいきません。

@beverage = Order.beverage.find(params[:beverage_id])明らかに使用していないため、コントローラーから を削除することもできます。

于 2013-02-15T12:27:18.453 に答える