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을
또는 수행 내가 할 확장자를 변경 : 포함 => {에서 => status_names.to_s} – mhenrixon