gpt4 book ai didi

ruby-on-rails - datetime_select 的多参数错误

转载 作者:行者123 更新时间:2023-11-29 11:18:14 24 4
gpt4 key购买 nike

我的表单中有以下代码。

<%= f.datetime_select(:date_time, :prompt => {:day => 'Day', :month => 'Month', :year => 'Year'}, :start_year => Date.today.year, :end_year => Date.today.year + 2, :minute_step => 15, :include_blank => false) %> if either one is blank.

当其中一个字段留空时,我得到:

1 error(s) on assignment of multiparameter attributes

传递的参数是:

{"utf8"=>"✓",
"authenticity_token"=>"kQpfsj5RxnDtxkvBdwPEFnX1fY6euKnMQeDRAkvJvIE=",
"event"=>{"description"=>"",
"venue"=>"",
"street"=>"",
"city"=>"",
"country_id"=>"",
"date_time(1i)"=>"",
"date_time(2i)"=>"",
"date_time(3i)"=>"",
"date_time(4i)"=>"00",
"date_time(5i)"=>"00",
"ticket_url"=>""},
"x"=>"94",
"y"=>"12"}

有人知道为什么会这样吗?

在这个 link 似乎有一个“脏”修复, 但也许 Rails 3 中有更好的解决方案?

最佳答案

基督徒。这是 Rails 中的一个错误,它检查数据库以推断多参数属性所需的类型。我的猜测是您的“date_time”属性与数据库中的时间列没有关联。

我最近解决了这个问题,我想要一个非数据库属性来接受多参数属性,这是我能想到的最好的解决方案:

我发现自己想要设置一个 attr_accessor 来处理通过 f.datetime_select 助手在 form_for 标签中将日期传递给我的模型.所以这就是我所拥有的:

型号:

attr_accessor :my_time

查看:

<%= f.datetime_select :my_time %>

不幸的是,当我提交我的表格时,我得到了这个:

1 error(s) on assignment of multiparameter attributes

事实证明,这实际上是一个 Rails 错误,已提交票证。与此同时,我们如何进行这项工作?我能找到的唯一有吸引力的解决方案是使用 composed_of 作为 attr_accessor 的替代品。所以...

型号:

  composed_of :my_time,
:class_name => 'Time',
:mapping => %w(Time to_s),
:constructor => Proc.new{ |item| item },
:converter => Proc.new{ |item| item }

我对 composed_of 方法几乎一无所知,因此您可能应该自己阅读它,但我所知道的是它为给定的实例变量创建了读取器和写入器,并且更重要的是,setter 接受多参数属性。我如何选择选项:

class_name:我们期望的类名。在这种情况下,时间
映射:第一个参数是类,第二个参数似乎适用于类实例响应的任何方法。我选择了to_s构造函数:不太确定这应该如何工作。似乎在 @my_timenil 时被调用。
转换器:不太确定这应该如何工作。似乎是从 my_time= 时调用的,但似乎并未应用于批量分配。我在使用此解决方案时遇到的一个问题是时间设置为 UTC 而不是环境的时区。所以很遗憾,我们不能直接使用 my_time,而是需要将其转换为正确的时区:

Time.zone.parse(my_time.to_s(:number))

关于ruby-on-rails - datetime_select 的多参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com