Ruby on rails Rails ActiveRecord::MultiparameterAssignmentErrors
我的模型中有以下代码:Ruby on rails Rails ActiveRecord::MultiparameterAssignmentErrors,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的模型中有以下代码: 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
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] %>
你知道问题出在哪里吗?我看了没有乐趣,所以我有点卡住了
将日期添加到select无法解决此问题
最终,我试图实现的是模型的一个属性,它不是保存到数据库中,而是经过验证的。这似乎已经适用于同一模型中的其他一些简单字符串字段,只是不适用于:expiration\u date
有什么想法吗?如果您使用attr\u accessor,则表示您没有将该字段存储在数据库中 问题仍然在于,您不能将非持久性模型属性(即:未通过模型实际存储到数据库中)与helpers一起使用 这就是为什么Rails 3拥有ActiveModel:要使用任何对象,包括一些ActiveModel行为(通过模块包含),并与ActionPack的助手一起使用(如果我完全理解的话:) 尝试用
attr\u accessible
替换attr\u accessible
,或者如果您想保护该字段不被大量分配,甚至可以删除该行
我希望它能有所帮助。根据,Rails将询问全班该专栏的类型。因为该属性不是列,所以我们将得到nil,并且nil没有方法klass。所以,我刚刚为属性打了补丁。我把它放在我的类中(我的属性是出生日期
):
也许这会有所帮助:你有没有试着删除attr_访问器?@Johnathan-你已经链接到了我自己的问题。这可能有帮助,但我怀疑;)(在类的上下文中)一种更简短、更简洁的方法是:
columns\u hash[“birth\u date”]=ActiveRecord::ConnectionAdapters::Column.new(“birth\u date”,nil,“date”)
确实更好。非常感谢。
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'
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