鉴于迁移
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实现这种类型的映射。
答案 0 :(得分:0)
编写自定义访问器方法。
答案 1 :(得分:0)
我不确定我理解你要完成什么...特别是将时间和分钟存储在两个不同的列中,而不是存储日期/时间并提取小时和分钟.... buuuut ..我对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进行呼叫。邋but但它有效。
答案 2 :(得分:0)
查看Rails中的composed_of实用程序;它允许您将一个或多个数据库列映射到Ruby类的实例。
参考文献: