![](/img/trans.png)
[英]ActiveRecord::MultiparameterAssignmentErrors in StudentsController#create
[英]Rails ActiveRecord::MultiparameterAssignmentErrors
我的模型中有以下代码:
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 ,所以有点卡住了。
在select中添加日期并不能解决问题。
最终我试图实现的是模型的属性,该属性未保存到数据库,但已经过验证。 这似乎适用于同一模型中的其他一些简单字符串字段,而不是:expiry_date
有任何想法吗?
根据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
如果使用attr_accessor,则表示您没有在DB中存储该字段。
问题仍然在于您不能使用辅助工具来使用非持久性模型属性(即:实际上不是通过模型存储到数据库中)。
这就是为什么Rails 3有了ActiveModel:使用任何对象,包含一些ActiveModel行为(通过模块包含),并将它与ActionPack的助手一起使用(如果我理解的那样好:))。
尝试通过attr_accessible
替换attr_accessor
,或者如果要保护该字段不被大规模分配,甚至删除该行。
我希望它有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.