0

次のモデルがあるとします。

User (id)
  has_many :groups
  has_many :communities

Groups (community_id (OPTIONAL) )
  belongs_to :user
  belongs_to :community

Communities (id, archived (boolean) )
  has_many :groups
  has_many :group_members, :include => :user

次のようにして、ユーザーのグループを簡単に取得できます。

current_user.groups

問題は、コミュニティがアーカイブされている場合、それが current_user.groups に返されないようにすることです。

コミュニティーがアーカイブされていないユーザーのグループをすべて取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

current_user.groups.joins(:community).where('communities.archived' => false)

于 2012-07-13T21:25:40.810 に答える
0

これは少し面倒かもしれませんが、簡単に をループして current_user.groups、各グループのコミュニティがアーカイブされているかどうかを確認できます。たぶん、このようなもの

all_groups = current_user.groups
final_list = []
all_groups.each { |g| 
  if !g.community.archived
    final_list << g
  end
}

これにより、 のすべてcurrent_userのグループが調べられ、アーカイブされているかどうかがそれぞれチェックされます。そうでない場合は、 という配列に追加しますfinal_list。もっと洗練された方法があるかもしれませんが、少なくともそれは何をすべきかのアイデアを与えてくれます。

于 2012-07-13T21:21:07.943 に答える