我想找出我有三个模特之间的联系。
挑战,Sip,用户
用户可以创建Sip,用户可以向该Sip提交挑战;Sips有许多挑战。
challenge.rb
class Challenge < ActiveRecord::Base
belongs_to :user
belongs_to :sip, counter_cache: true
endsip.rb
class Sip < ActiveRecord::Base
belongs_to :user
has_many :challenges
enduser.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的挑战的用户。
发布于 2016-01-24 22:55:38
sip.challenges是一个集合,您必须通过map来获取用户。这将为您提供一组用户集合,因此您可以对其进行flatten,并对其进行uniq,并将其用于删除任何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= userhttps://stackoverflow.com/questions/34982376
复制相似问题