导轨 4 关联连接



我正在尝试找出我拥有的 3 个模型之间的关联。

挑战, 啜饮, 用户

用户可以

创建 Sip,用户可以向该 Sip 提交挑战;啜饮有很多挑战

挑战.rb

class Challenge < ActiveRecord::Base
  belongs_to :user
  belongs_to :sip, counter_cache: true
end

啜啜啦��

class Sip < ActiveRecord::Base
  belongs_to :user
  has_many :challenges
end

用户.rb

class User < ActiveRecord::Base
  has_many :challenges
  has_many :sips
end

以下是专栏:

Challenge: id, user_id, sip_id
Sip: id, user_id
User: id

在我的 sip 视图中,我试图获取这样的用户列表:

- @sip.each do |sip|
  = sip.challenges.users.to_json

最终,我想让所有提交挑战的用户都属于sip

sip.challenges是一个

集合,你必须map它才能获得用户。这将为你提供用户集合,因此您可以flatten它,uniq它,并compact它以删除任何nil

sip.challenges.map(&:user).flatten.uniq.compact

flatten[[1,2], [2,3]]变成[1,2,2,3]uniq把它变成[1,2,3]

map(&:user)user发送到map左侧的可枚举(集合)中的每个项目,在本例中,发送到challenges中的每个挑战。

这有效吗?呃。。。留给你做练习。

编辑:添加HTML标签:做所有事情的结果本身就是一个Enumerable,所以你可以each它:

%ul
  - sip.challenges.map(&:user).flatten.uniq.compact.each do |user|
    %li= user

相关内容

最新更新