0

私はそのようなモデル構造を持っています:

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

確かに機能していません...しかし、3番目のモデルからデータを取得するにはどうすればよいですか?

4

2 に答える 2

2

user.groups.map(&:markup).sumうまくやればいい

編集:

ネストされた配列だと思っていたので、 #flat_map を使用しました。しかし、 has_many :through はそれを単一の結果リストに結合するため、 #map は問題ありません

EDIT2:

markup@VladisAzamaris との議論で、列がフロートであるため、sumより適切であることが指摘されました。join

于 2013-01-13T21:00:39.683 に答える
1

まず、has_many :throughここでそれを利用することもできます:

user.groups # => all the groups to which this user belongs

マークアップを取得するには、このようなものはどうですか? これは、実際にすべてを 1 つの大きな文字列にしたい場合を除いて、それらすべてをリストに入れます。

user.groups.map(&:markup)

また、モデルに他のフィールドがない場合はUserGroup、リレーションシップを検討してください。この場合has_and_belongs_to_many、Rails はそのグルーUserGroupモデルを宣言するのではなく処理します。

于 2013-01-13T21:00:32.430 に答える