0

我有两个课程,订单和饮料 - 订单 has_one 饮料和饮料 has_many 订单。Orders 表有一个 drink_id 字段,在我创建时会正确填充。

但是,我真的很难让饮料的名称显示在 Orders#index 中,而不仅仅是 ID。我觉得我真的把事情复杂化了——在 Rails 中让这个(基本功能)工作的最干净的方法是什么?

控制器:

  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

此刻,它只是给了我

未定义的方法“饮料”#

我在某处做错了吗?

4

2 回答 2

1

我有两个课程,订单和饮料 - 订单 has_one 饮料和饮料 has_many 订单。

你应该有:

  • 饮料 has_many :orders
  • 订单belongs_to :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 回答
1

按照 gabriel 的建议设置模型后,您可以执行以下操作:

@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 回答