我的对象关系有什么不对吗?

时间:2010-01-26 15:24:03

标签: ruby-on-rails ruby entity-relationship

我想要哪个订单有不同的订单状态,所以我有一个名为“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

我只想要与状态相关的订单,但状态与订单无关,我可以这样做吗?

3 个答案:

答案 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