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