给定一个迁移
class CreateTalks < ActiveRecord::Migration
def self.up
create_table :talks do |t|
t.integer :duration_hours
t.integer :duration_minutes
end
end
def self.down
drop_table :talks
end
end和模型
class Talk < ActiveRecord::Base
end和对象
class Duration
attr_accessor :hours, :minutes
end如何将duration_hours和duration_minutes列映射到Talk中的Duration属性,以便
d = Talk.first.duration
hours = d.hours
minutes = d.minutes我知道在这种情况下,我可以将小时和分钟转换为秒,并将它们存储在单个列中,但我希望了解如何使用ActiveRecord实现这种类型的映射。
发布于 2010-01-16 09:20:28
我不太明白你想做什么.尤其是将小时和分钟存储在两个不同的列中,而不是存储日期/时间并提取小时和分钟……但是..。我对attr_accessor的理解是:
attr_accessor :duration_hours等于:
def duration_hours
@duration_hours
end
def duration_hours=(d)
write_attribute(:duration_hours, d)
end因此,Eimantas所指的是定制上述方法以按照您认为合适的方式存储或显示信息……您应该已经能够执行以下操作:
d = Talk.first
hours = d.duration_hours
minutes = d.duration_minutes对吗?
编辑:
如果你想列一个讲座或其他东西的列表,以及每次使用你的专栏所用的时间,我的方法是(仅用于展示目的):
def duration
@duration = self.duration_hours.to_s + ":" + self.duration_minutes.to_s
end然后使用talk.duration调用。草率,但它是有效的。
https://stackoverflow.com/questions/2075448
复制相似问题