我的模型中有以下代码:
attr_accessor :expiry_date
validates_presence_of :expiry_date, :on => :create, :message => "can't be blank"
我认为以下几点:
<%= date_select :account, :expiry_date, :discard_day => true, :start_year => Time.now.year, :end_year => Time.now.year + 15, :order => [:month, :year] %>
但是,当我提交表格时,我得到:
ActiveRecord::MultiparameterAssignmentErrors in SignupController#create
/Users/x/.rvm/gems/ruby-1.8.6-p383/gems/activerecord-2.3.5/lib/active_record/base.rb:3073:in `execute_callstack_for_multiparameter_attributes'
/Users/x/.rvm/gems/ruby-1.8.6-p383/gems/activerecord-2.3.5/lib/active_record/base.rb:3028:in `assign_multiparameter_attributes'
/Users/x/.rvm/gems/ruby-1.8.6-p383/gems/activerecord-2.3.5/lib/active_record/base.rb:2750:in `attributes='
/Users/x/.rvm/gems/ruby-1.8.6-p383/gems/activerecord-2.3.5/lib/active_record/base.rb:2438:in `initialize'
关于问题可能是什么的任何想法吗?我看过#93277 https://stackoverflow.com/questions/93277/what-does-activerecordmultiparameterassignmenterrors-mean没有快乐,所以我有点卡住了。
在选择中添加日期并不能解决问题。
最终,我想要实现的是模型的属性,该属性没有保存到数据库中,而是经过验证。这似乎已经适用于同一模型中的其他一些简单字符串字段,但不适用于 :expiry_date
有任何想法吗?
As per https://github.com/rails/rails/blob/v3.0.4/activerecord/lib/active_record/base.rb#L1764 https://github.com/rails/rails/blob/v3.0.4/activerecord/lib/active_record/base.rb#L1764,Rails 会询问类该列的类型是什么。由于该属性不是列,因此我们将得到 nil,并且 nil 没有 klass 方法。所以我刚刚打了补丁column_for_attribute
。我把它放在我的班级中(我的属性是birth_date
):
def column_for_attribute_with_birth_date(name)
if name == 'birth_date'
return Object.new.tap do |o|
def o.klass
Date
end
end
end
column_for_attribute_without_birth_date(name)
end
alias_method_chain :column_for_attribute, :birth_date
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)