Rails ActiveRecord :: MultiparameterAssignmentErrors

我的模型中有以下代码:

attr_accessor :expiry_date validates_presence_of :expiry_date, :on => :create, :message => "can't be blank" 

以及我认为的以下内容:

  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中添加日期并不能解决问题。

最终我试图实现的是模型的属性,该属性未保存到数据库,但已经过validation。 这似乎适用于同一模型中的其他一些简单字符串字段,而不是:expiry_date

有任何想法吗?

如果使用attr_accessor,则表示您没有在DB中存储该字段。

问题仍然在于您不能使用辅助工具来使用非持久性模型属性(即:实际上不是通过模型存储到数据库中)。

这就是为什么Rails 3有了ActiveModel:使用任何对象,包含一些ActiveModel行为(通过模块包含),并将它与ActionPack的助手一起使用(如果我理解的那样好:))。

尝试通过attr_accessible替换attr_accessor ,或者如果要保护该字段不被大规模分配,甚至删除该行。

我希望它有所帮助。

根据https://github.com/rails/rails/blob/v3.0.4/activerecord/lib/active_record/base.rb#L1764,Rails会询问该类该列的类型。 由于该属性不是列,我们将得到nil,而nil没有方法klass。 所以,我刚修补了column_for_attribute 。 我把它放在我的class级(我的属性是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