2016-06-03 4 views
0

Скажем, например, у меня есть заказ и статус.Как управлять ассоциациями состояний в рельсах

Статус:

  1. status_id: 1, status_name: Open
  2. status_id: 2, status_name: Закрытое

Заказ:

  1. заказ #: 1, status_id: 1

Как управлять ассоциацией в Ruby on Rails?

Будет ли следующий код лучшим выбором?


class Status < ActiveRecord::Base 

     has_many :orders 

end 

class Order < ActiveRecord::Base 

     belongs_to :status 

end 
+1

Довольно просто, да ваш код правильно. Только комментарий состоит в том, чтобы убедиться, что столбец идентификатора таблицы состояния называется 'id', а не' status_id' - рельсы будут считать первое. – Matt

+0

Согласен, @Matt. проблема в том, что статус на самом деле не имеет большого количества заказов, и порядок действительно не принадлежит статусу, но если это лучший способ. – David

+0

Я не понимаю - почему вы чувствуете, что у этого статуса нет много заказов? Можете ли вы иметь более одного заказа одновременно, которые являются «открытыми»? Если это так, статус «Открыть» имеет много порядков, принадлежащих ему. Что заставляет вас чувствовать себя иначе? – Matt

ответ

1

Для вас проблем я предлагаю использовать Перечисление. Для этого вы будете иметь класс Order так:

class Order < ActiveRecord::Base 
    enum status: [:open, :closed] 
end 

Это даст вам возможность вызывать методы, как:

order = Order.new 
order.closed? # => false 
order.status # => "open" 

Помните, что при определении перечисления, вопросы порядка. Таким образом, определение:

enum status: [:open, :closed] 

отличается от:

enum status: [:closed, :open] 
+0

Спасибо @psantos, но это всего лишь пример. Я хочу иметь возможность управлять статусами в виде таблицы, с флагами и т. Д. – David

+0

создать новую модель для статусов –

+0

Статусы таблиц и порядок таблиц? Кажется странным для меня, потому что его ассоциация 1: 1. Я бы создал переменную экземпляра (@var) и сохранил там имя статуса. –

Смежные вопросы