我想要哪个订单有不同的订单状态,所以我有一个名为“status”的表,在status.rb中,它喜欢这个:
class Status < ActiveRecord::Base
belongs_to :order
attr_accessible :name
end
这是我的订单.rb:
class Order < ActiveRecord::Base
has_one :statuses
end
在我看来,我试着像这样调用相关的状态:
<%= order.statuses.name%>
它不起作用,所以,我这样称呼它:
<% order.statuses.each_with_index do |order_status, index| %>
<%= order_status.name%>
<% end %>
它仍然无效。我有这样的错误:
未初始化的常量订单::状态
我将代码更改为:
应该是
has_one:status
和
order.status.name
但我有这个错误:
SQLite3 :: SQLException:没有这样的列:statuses.order_id:SELECT * FROM“status”WHERE(“status”.order_id = 5)LIMIT 1
我只想要与状态相关的订单,但状态与订单无关,我可以这样做吗?
答案 0 :(得分:4)
由于多元化,您收到错误。你应该:
class Order < ActiveRecord::Base
has_one :status
end
然而,听起来你可能有向后的belongs_to - has_one关系。如果您只想在数据库中只有少数状态(例如:待处理,已结算,已发货,已完成),则状态应为has_many
个订单,每个订单应为belongs_to
状态。现在设置它的方式,每个订单都有一个单独的Status对象。这可能是你想要的,但要确保你理解它意味着每个状态都不同(可能每个都是一个或两个描述顺序的句子)。
答案 1 :(得分:1)
应该是
has_one:status
和
order.status.name
Ruby on Rails内置多元化。
答案 2 :(得分:0)
由于您将关系定义为has_one
,因此您应该以单数形式使用它:order.status.name