首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将2个数据库列映射到一个属性

如何将2个数据库列映射到一个属性
EN

Stack Overflow用户
提问于 2010-01-16 07:32:27
回答 3查看 330关注 0票数 0

给定一个迁移

代码语言:javascript
运行
复制
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

和模型

代码语言:javascript
运行
复制
class Talk < ActiveRecord::Base
end

和对象

代码语言:javascript
运行
复制
class Duration
   attr_accessor :hours, :minutes
end

如何将duration_hours和duration_minutes列映射到Talk中的Duration属性,以便

代码语言:javascript
运行
复制
d = Talk.first.duration
hours = d.hours
minutes = d.minutes

我知道在这种情况下,我可以将小时和分钟转换为秒,并将它们存储在单个列中,但我希望了解如何使用ActiveRecord实现这种类型的映射。

EN

Stack Overflow用户

发布于 2010-01-16 09:20:28

我不太明白你想做什么.尤其是将小时和分钟存储在两个不同的列中,而不是存储日期/时间并提取小时和分钟……但是..。我对attr_accessor的理解是:

代码语言:javascript
运行
复制
attr_accessor :duration_hours

等于:

代码语言:javascript
运行
复制
def duration_hours
  @duration_hours
end

def duration_hours=(d)
  write_attribute(:duration_hours, d)
end

因此,Eimantas所指的是定制上述方法以按照您认为合适的方式存储或显示信息……您应该已经能够执行以下操作:

代码语言:javascript
运行
复制
d = Talk.first
hours = d.duration_hours
minutes = d.duration_minutes

对吗?

编辑:

如果你想列一个讲座或其他东西的列表,以及每次使用你的专栏所用的时间,我的方法是(仅用于展示目的):

代码语言:javascript
运行
复制
def duration
  @duration = self.duration_hours.to_s + ":" + self.duration_minutes.to_s
end

然后使用talk.duration调用。草率,但它是有效的。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2075448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档