Я пытаюсь найти лучшее решение для следующего сценария. У меня есть модель под названием «Статья» с целым полем, называемым «статус». Я хочу, чтобы обеспечить массив уровня класса состояний, как показано ниже,Массив класса уровня класса Ruby-On-Rails
class Article < ActiveRecord::Base
STATUSES = %w(in_draft published canceled)
validates :status, presence: true
validates_inclusion_of :status, :in => STATUSES
def status_name
STATUSES[status]
end
# Status Finders
def self.all_in_draft
where(:status => "in_draft")
end
def self.all_published
where(:status => "published")
end
def self.all_canceled
where(:status => "canceled")
end
# Status Accessors
def in_draft?
status == "in_draft"
end
def published?
status == "published"
end
def canceled?
status == "canceled"
end
end
Так что мой вопрос, если это лучший способ добиться, не имея модели для хранения статусы? И во-вторых, как использовать эти методы в ArticlesController и соответствующих представлениях? Я изо всех сил пытаюсь понять использование этих методов. Чтобы быть конкретным, как это сделать?
article = Article.new
article.status = ????
article.save!
or
<% if article.in_draft? %>
<% end %>
I greatly appreciate any sample code example. I'm using rails 4.0.0 (not 4.1.0 which has enum support).
Несомненно, в чем проблема? Как это сделать? Единственное, что я могу добавить, это некоторые константы с разрешенными статусами или просто создавать методы, которые устанавливают их так же, как у вас уже есть методы индикатора состояния. –
Как установить article.status, обозначенный вопросительными знаками. Могу ли я сделать следующее, article.status = Article :: STATUSES [0] или article.status = Article :: STATUSES ['in_draft']? Я не уверен в этом конкретном синтаксисе. – Atarang
Рассматривали ли вы использование конечного автомата? – Stefan