Ruby on rails 3 如何在字符串和属性之间自动映射?

Ruby on rails 3 如何在字符串和属性之间自动映射?,ruby-on-rails-3,Ruby On Rails 3,我的代码中的某个地方有一个很小的逻辑错误,我无法准确地找出问题所在。让我们从头开始。我的order类使用以下扩展 class ActiveRecord::Base def self.has_statuses(*status_names) validates :status, :presence => true, :inclusion => { :in => status_names}

我的代码中的某个地方有一个很小的逻辑错误,我无法准确地找出问题所在。让我们从头开始。我的order类使用以下扩展

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    
这对于“状态”的查询和初始设置非常有用

需要“#{Rails.root}/lib/active_记录_扩展名”
类顺序
现在我开始设置一个状态,效果很好。完全没有问题,我可以按预期保存我的新订单。另一方面,更新订单不起作用。我收到一条信息说:

“状态不包括在列表中”

当我检查时,order.status=='created'似乎正在尝试匹配:created。我尝试设置“已创建”、“正在进行”等状态,但无法使其他一些功能正常工作


是否要在字符串/属性之间自动映射?

根据您的描述,看起来您正在将字符串与符号进行比较。可能需要补充:

   define_method "#{status_name}=" do
       self.status = status_name.to_sym
    end

或者在状态名称上做一个#to#s

总之,我将扩展名改为:inclusion=>{:in=>status_names.to#s}
   define_method "#{status_name}=" do
       self.status = status_name.to_sym
    end