改进 Ruby Sequel 模型代码
Improving Ruby Sequel Model Code
我有以下模型检索一个名为 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 中有多少优雅的方式来做事,这可以用更优雅的方式编写。
想到的是这个,基本上将所有内容打包到一个地图循环中:
users = Model::GroupUser.where(:group_id => self[:address]).map do |group_user|
Model::User.where(id: group_user[:user_id]).first.email
end
如果您在 Sequel 模型中设置关联,则可以在循环中使用 group_user.user.first.email
。此外,在这种情况下,您可能希望预先加载关联以获得更好的性能:users = Model::GroupUser.eager(:user).where...
.
我有以下模型检索一个名为 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 中有多少优雅的方式来做事,这可以用更优雅的方式编写。
想到的是这个,基本上将所有内容打包到一个地图循环中:
users = Model::GroupUser.where(:group_id => self[:address]).map do |group_user|
Model::User.where(id: group_user[:user_id]).first.email
end
如果您在 Sequel 模型中设置关联,则可以在循环中使用 group_user.user.first.email
。此外,在这种情况下,您可能希望预先加载关联以获得更好的性能:users = Model::GroupUser.eager(:user).where...
.