У меня есть небольшая логическая ошибка где-то в моем коде, и я не могу точно понять, в чем проблема.Начнем с самого начала.У меня есть следующее расширение, которое использует мой класс заказа.
class ActiveRecord::Base
def self.has_statuses(*status_names)
validates :status,
:presence => true,
:inclusion => { :in => status_names}
status_names.each do |status_name|
scope "all_#{status_name}", where(status: status_name)
end
status_names.each do |status_name|
define_method "#{status_name}?" do
status == status_name
end
end
end
end
Это прекрасно работает для запросов и первоначальной установки "статусов".
require "#{Rails.root}/lib/active_record_extensions"
class Order < ActiveRecord::Base
has_statuses :created, :in_progress, :approved, :rejected, :shipped
after_initialize :init
attr_accessible :store_id, :user_id, :order_reference, :sales_person
private
def init
if new_record?
self.status = :created
end
end
end
Теперь я установил статус изначально, и это прекрасно работает.Никаких проблем, и я могу сохранить свой новый заказ, как ожидалось.Обновление заказа с другой стороны не работает.Я получаю сообщение:
«Статус не включен в список»
Когда я проверяю, кажется, что order.status == 'создал', и он пытаетсясопоставить: создано.Я попытался установить has_statuses 'create', 'in_progress' и т. Д., Но не смог заставить другие вещи работать.
В любом случае, автоматически сопоставлять строку / атрибут?