将具有has_one关联的Activerecord结果转换为每个记录的单个哈希

时间:2011-09-02 17:42:33

标签: ruby-on-rails activerecord hash merge flatten

如果我有来自Activerecord的结果我有一个哈希数组,如果我有急切加载的has_one关联,则每个记录哈希都有一个嵌套的哈希关联记录。

我的问题是,是否有一个快速rails方法允许您将这些嵌套哈希值合并到每个记录的单个哈希中?

类比是将记录和关联转换为单个表行。

另一个类比是将n级嵌套哈希的哈希转换为单级哈希。

2 个答案:

答案 0 :(得分:1)

方法1:

将它们包含在select子句

class User
  has_one :profile
end

class Profile
  belongs_to :user
  # street1, street2, city etc
end

profiles = Profile.joins(:user).select("users.*, profiles.*").all
profiles.first.login

方法2:

使用委托

class Profile
  belongs_to :user
  # street1, street2, city etc
  delegate :name, :name=, :email, :email=, :to => :user  
end

答案 1 :(得分:0)