attr_accessor使用select_date获取日期和问题

我正在尝试使用attr_accessor作为通常正常工作的日期,除非我尝试将其与select_date帮助器方法一起使用。 看看帮助器方法背后的代码,我猜它会查找具有日期类型的表列。在这种情况下,由于没有表,它没有正确处理它,我得到: 的ActiveRecord :: MultiparameterAssignmentErrors
"search"=>{"number_of_days"=>"3",
 "searchable_id"=>"6933",
 "startdate(1i)"=>"2011",
 "startdate(2i)"=>"2",
 "startdate(3i)"=>"11"}}
有没有解决的办法?或者我是否需要在控制器中创建某种过滤器?我更喜欢在模型级别上做,但我不知道如何处理这种情况?每个人的attr_accessor似乎有点过分杀人。其他人有一个优雅的解决方案?     
已邀请:
保存/更新模型时,通常不会保存attr_accessor字段。你是如何更新模型的? 此外,您可以将startdate参数转换为日期对象,如下所示:
@start_date = Date.civil(params[:search][:"startdate(1i)"].to_i,params[:search][:"startdate(2i)"].to_i,params[:search][:"startdate(3i)"].to_i)
点击这里     
select_date
用于构建与模型字段无关的下拉列表(您可以在另一侧获取它们并根据需要执行所需操作)。我假设你的意思是
date_select
哪个用掉了模特? 在任何情况下,据我所知,长话短说,没有好的和漂亮的方式让这个工作。这不是因为帮助程序的工作方式,而是因为活动记录处理这些属性的方式分为多个参数。 如果你感兴趣的话会更详细一点,这就是因为当Active Record正在处理你传入的参数时,它会通过
execute_callstack_for_multiparameter_attributes
来解释已被拆分为的键。 “date(1i)”样式,并将它们粘贴到它们应该适用的类中(日期或时间对象)。它是否应该创建一个日期或时间的方法是通过检查它与属性的类型(见这里),但由于你的'startdate'属性没有绑定到特定的类型,它不会得到被视为数据库中的日期或日期时间列。 我想我会像@ Phyo-Wai-Win一样处理它,但是使用
select_date
在'search'命名空间之外设置一个不同的参数,然后在控制器中根据需要传递给模型。这样,它没有多少工作,这意味着你没有弄乱你初始化记录的方式或它预期的属性。     
我在这里有点晚了,但我刚遇到这个问题并且不喜欢最佳答案。我在ActiveRecord源中找到了一个名为extract_callstack_for_multiparameter_attributes的方法(这与idlefingers提到的方法不同) 我的模型中有以下方法。我手动调用此方法但您可以覆盖
update_attributes
从控制器保存时自动运行它。 params参数实际上是来自控制器的params [:my_model]。
attr_accessor :submit_from, :submit_to

def set_dates(params)
  dates = extract_callstack_for_multiparameter_attributes(params)

  dates.each_pair do |field, date_array|
    send "#{field}=", Date.new(*date_array)
  end
end
    

要回复问题请先登录注册