我有这样的模型结构:
class User < ActiveRecord::Base
has_many :groups, :through => :user_groups
has_many :orders
has_many :user_groups
end
-
class UserGroup < ActiveRecord::Base
belongs_to :group
belongs_to :user
end
-
class Group < ActiveRecord::Base
has_many :user_groups
has_many :users, :through => :user_groups
end
在模型组中,我有字段标记。 我如何通过它的user_groups为每个用户获取组的标记字段?
我试试:
user.user_groups.each do |u|
summ += u.groups.markup
end
当然它不起作用......但是如何从第三个模型中获取数据?
答案 0 :(得分:2)
user.groups.map(&:markup).sum
应该做得很好
编辑:
我使用了#flat_map,因为我认为它是一个嵌套数组。但是has_many:通过将它组合成一个结果列表,所以#map会很好
EDIT2:
在与@VladisAzamaris的讨论中,有人指出markup
列是一个浮点数,因此sum
比join
答案 1 :(得分:1)
首先,也可以在这里利用has_many :through
:
user.groups # => all the groups to which this user belongs
这样的东西如何获得标记?这将把它们全部放在一个列表中,除非你真的想把它们全部放在一个大字符串中,在这种情况下你就加入了它们。
user.groups.map(&:markup)
此外,如果UserGroup
模型上没有任何其他字段,请考虑has_and_belongs_to_many
关系,其中Rails会为您处理粘合UserGroup
模型,而不是让您声明它