当前位置:  开发笔记 > 编程语言 > 正文

ActiveRecord :: MultiparameterAssignmentErrors是什么意思?

如何解决《ActiveRecord::MultiparameterAssignmentErrors是什么意思?》经验,为你挑选了2个好方法。

我有一个带有datetime_select字段的rails表单.当我尝试提交表单时,我得到以下异常:

ActiveRecord::MultiparameterAssignmentErrors in WidgetsController#update 
1 error(s) on assignment of multiparameter attributes

如果是验证错误,为什么我在页面上看不到错误?

这是在Rails 2.0.2中



1> Jason Wadswo..:

事实证明,rails使用称为多参数分配的东西来传输日期和时间,这些小部件在将params分配给模型实例时会重新组装.

我的问题是我使用datetime_select表单字段作为日期模型字段.当多参数魔法试图在Date对象上设置时间时,它显然会窒息.

解决方案是使用date_select表单字段而不是表单字段datetime_select.



2> Lance Pollar..:

超级黑客,但我需要立即解决这个问题的客户端项目.它仍然是Rails 2.3.5的一个错误.

使用date_select或者datetime_select,如果在initialize方法中将其添加到模型中,则可以预先解析传递的表单序列化属性以使其工作:

def initialize(attributes={})
  date_hack(attributes, "deliver_date")
  super(attributes)
end

def date_hack(attributes, property)
  keys, values = [], []
  attributes.each_key {|k| keys << k if k =~ /#{property}/ }.sort
  keys.each { |k| values << attributes[k]; attributes.delete(k); }
  attributes[property] = values.join("-")
end

我使用嵌套的多态模型. 这是我展示我正在使用的模型的问题.所以我需要accepts_nested_attributes_for一个日期时间.

这是使用控制台的输入和输出:

e = Event.last
=> #
e.model_surveys
=> []
e.model_surveys_attributes = [{"survey_id"=>"864743981", "deliver_date(1i)"=>"2010", "deliver_date(2i)"=>"2", "deliver_date(3i)"=>"11"}]
PRE ATTRIBUTES: {"survey_id"=>"864743981", "deliver_date(1i)"=>"2010", "deliver_date(2i)"=>"2", "deliver_date(3i)"=>"11"}
# run date_hack
POST ATTRIBUTES: {"survey_id"=>"864743981", "deliver_date"=>"2010-2-11"}
e.model_surveys
=> [#]
>> e.model_surveys.last.deliver_date.class
=> ActiveSupport::TimeWithZone

否则它是null,否则会抛出错误:

1 error(s) on assignment of multiparameter attributes

希望有所帮助,兰斯

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有