Ruby on rails 3 如何在字符串和属性之间自动映射?
我的代码中的某个地方有一个很小的逻辑错误,我无法准确地找出问题所在。让我们从头开始。我的order类使用以下扩展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}
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