从rails中的第三个模型获取数据

时间:2013-01-13 20:56:24

标签: ruby-on-rails model rails-activerecord

我有这样的模型结构:

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

当然它不起作用......但是如何从第三个模型中获取数据?

2 个答案:

答案 0 :(得分:2)

user.groups.map(&:markup).sum应该做得很好

编辑:

我使用了#flat_map,因为我认为它是一个嵌套数组。但是has_many:通过将它组合成一个结果列表,所以#map会很好

EDIT2:

在与@VladisAzamaris的讨论中,有人指出markup列是一个浮点数,因此sumjoin

更合适

答案 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模型,而不是让您声明它