我有两个班级,订单和饮料 - 订单has_one饮料和饮料has_many订单。 Orders表有一个beverage_id字段,在我创建时会正确填充。
然而,我真的很难让饮料的名称显示在Orders#index中,而不仅仅是ID。我觉得我真的过于复杂化了 - 使用这个(基本功能)的铁路中最干净的方法是什么?
控制器:
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
此刻,它只是给了我
#p>#的未定义方法`饮料'
我在某处做错了吗?
答案 0 :(得分:1)
我有两个班级,订单和饮料 - 订单has_one饮料和饮料has_many订单。
你应该:
因此,您的课程可能设置错误。你必须有类似的东西。
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])
,因为您显然没有使用它。
答案 1 :(得分: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