2011-05-17 23 views
3

好吧,我正在慢慢掌握这一点,但我需要一些更多的帮助。Ruby on Rails - 多参数赋值和attr_accessor和12_hour_time

我在我的视图中使用time_select,因此我正在处理多参数分配。检查。

<%= pt.time_select :time, :twelve_hour => true, :minute_step => 5 %> 

,但我做的顽皮事,使用它与不在数据库中的属性:

attr_accessor time 

因此,因为它可以不看分贝,它可以” T型件一起什么多参数分配应该是,所以我得到以下错误:

1 error(s) on assignment of multiparameter attributes 

因此我使用,我发现here信息:

composed_of :time, 
      :class_name => 'DateTime', 
      :mapping => [%w(DateTime to_s)], 
      :constructor => Proc.new{ |item| item }, 
      :converter => Proc.new{ |item| item } 

其他有用的链接:rubyonrails.org | apidock.com

这个删除错误,但现在的问题是,我使用的插件不能正常工作,我想。我正在使用http://code.google.com/p/rails-twelve-hour-time-plugin/。目标是,我试图让时间选择有3个下拉菜单:hhmmam/pm

所以问题是:我需要如何调整我的composed_of method才能让插件正确转换它?或者有没有更好的方法来处理这种疯狂?

我不知道我需要什么映射器/构造函数/转换器。现在,对象保持小时和分钟,除非小时不转换为24小时(插件应该照顾,我认为)。

回答

5

问题是我没有正确地按照文章。我应该一直使用时间模型。

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

看起来像这是一个常见问题。欲了解更多信息,请查看link。鉴于那里的建议是要做到:

class Whatever < ActiveRecord::Base 
    ... 

    attr_accessor :arrival_time 
    columns_hash["arrival_time"] = ActiveRecord::ConnectionAdapters::Column.new("arrival_time", nil, "time") 
end 

我还在出错误,但是当我得到的东西的工作我会及时更新。

+1

'composed_of'不工作对我来说,同样的错误与attr_accessor。但是,设置'columns_hash'运行良好,谢谢! – 2012-07-23 06:10:32

+1

'columns_hash'修复几乎为我工作,但它节省了UTC时间,并忽略夏令时。花2小时'Time.zone.parse'试验和'.in_time_zone'我终于想通了这个问题后 - 改变从'time'了'sql_type'到'时间戳和timezone'使得它完美地工作:'columns_hash [“ARRIVAL_TIME “] = ActiveRecord :: ConnectionAdapters :: Column.new(”arrival_time“,nil,”timestamp with timezone“)''。这是在Rails项目上使用PostgreSQL,所以YMMV。 – Simon 2012-08-13 21:47:07

+0

我意识到我回复了一个超过一岁的帖子,顺便说一句,但我想我会提及时区的事情,以防其他任何人在未来受到挫折:) – Simon 2012-08-13 21:57:36