改进Ruby Sequel模型代码

时间:2018-05-01 00:42:19

标签: ruby model sequel

我有以下模型检索称为GroupUser的对象,它们是名称建议,一组用户:

[# < Model::GroupUser @values = {: id => 24,
  : user_id => 8,
  : group_id => 3,
  : from_group_id => 3
} > , # < GroupUser @values = {: id => 27,
  : user_id => 9,
  : group_id => 3,
  : from_group_id => 3
} > , # < GroupUser @values = {: id => 36,
  : user_id => 7,
  : group_id => 3,
  : from_group_id => 3
} > ]

我想将此GroupUser转换为各自的电子邮件地址(每个User都有一个关联的email属性)

所以我做了以下事情:

users = []
group_users = Model::GroupUser.where(:group_id => self[:address]).map(:user_id)
group_users.each do |user|
  users << Model::User.where(id: user).first.email
end
users

它有效..但我觉得在Ruby中有多少优雅的方法可以用更优雅的方式编写。

1 个答案:

答案 0 :(得分:1)

我想到的是,基本上将所有内容打包到一个地图循环中:

group_user.user.first.email

如果您在续集模型中设置关联,则可以在循环中使用users = Model::GroupUser.eager(:user).where...。此外,在这种情况下,您可能希望加入关联以获得更好的性能:MuiSvgIcon