Что-то не так в моих объектных отношениях? - PullRequest
2 голосов
/ 26 января 2010

Я хочу, чтобы у какого заказа был другой статус, поэтому у меня есть таблица с именем "status", в файле status.rb это нравится:

class Status < ActiveRecord::Base
  belongs_to :order 
  attr_accessible :name

end

А это мой заказ.рб:

class Order < ActiveRecord::Base
  has_one :statuses
end

На мой взгляд, я пытаюсь вызвать соответствующий статус следующим образом:

    <%= order.statuses.name%>

Это не работает, поэтому я назвал это так:

<% order.statuses.each_with_index do |order_status, index| %>
<%= order_status.name%>
<% end %>

Это все еще не работает. У меня есть ошибка, как это:

неинициализированная константа Order :: Status

Я изменил свой код на это:

должно быть

has_one: статус

и

order.status.name

Но у меня есть эта ошибка:

SQLite3 :: SQLException: такого столбца нет: statuses.order_id: SELECT * FROM "statuses" WHERE ("statuses" .order_id = 5) LIMIT 1

Мне нужен только заказ, связанный со статусом, но статус не связан с заказом, могу ли я это сделать?

Ответы [ 3 ]

4 голосов
/ 26 января 2010

Вы получаете ошибку из-за множественного числа. Вы должны иметь:

class Order < ActiveRecord::Base
  has_one :status
end

Однако звучит так, как будто у вас может быть отношение принадлежат - к - есть_ назад. Если вы хотите, чтобы в базе данных было только несколько статусов (например: ожидающий, выставлен счет, отправлен, завершен), Статус должен has_many заказов, а каждый Заказ belongs_to Статус. То, как вы его сейчас настроите, для каждого ордера будет отдельный объект Status. Это может быть тем, что вы хотите, но убедитесь, что вы понимаете, что это подразумевает, что каждый статус отличается (возможно, каждое представляет собой предложение или два, описывающие порядок).

1 голос
/ 26 января 2010

должно быть

has_one: статус

и

order.status.name

Ruby on Rails имеет встроенное множественное число.

0 голосов
/ 26 января 2010

Так как вы определили отношение как has_one, вы просто должны использовать его в единственном числе: order.status.name

...