0
我的代码在某处存在一个小小的逻辑错误,我无法弄清楚究竟是什么问题。让我们从头开始。我的订单类使用了以下扩展名。如何自动映射字符串和属性?
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'创建','in_progress'等,但无法获得其他一些工作。
无论如何自动映射字符串/属性?
完全,我改变了扩展名是:包容=> {:在=> status_names.to_s} – mhenrixon 2011-03-09 18:47:58