モデル:project.rb
def groups_by_role
member_principals.find(:all, :include => [:principal, :roles]).inject({}) do |h, m|
m.roles.each do |r|
h[r] ||= []
h[r] << m.principal
end
h
end
end
コントローラー:projects_controller.rb
@groups_by_role = @project.groups_by_role
ビュー:members_index.html.rb
<% if @groups_by_role.any? %>
<div class="members box">
<h3><%= l(:label_member_plural)%></h3>
<p>
<% @groups_by_role.keys.sort.each do |role| %>
<%= h role %>: <%= @groups_by_role[role].sort.collect{|u| u}.join(", ").html_safe %>
<br />
<% end %>
</p>
</div>
<% end %>
すべてのロールとプリンシパルを検索するメソッドgroup_by_roleを持つモデルがあります。ここで、プリンシパルは、特定のロールに属するユーザーとグループを定義します。このメソッドはproject.rbの一部です。
後で、コントローラーで同じメソッドをプロジェクトに定義し、それをインスタンス変数に割り当てて、ビューで使用できるようにします。つまり、@groups_by_roleです。
最後に、特定のユーザーとグループの役割を収集して表示します。
特定の@projectのコンソールからの出力は、次のようになります。@groups_by_role
{#<Role id: 18, name: "Project Manager", permissions: [:add_project, :edit_project, :close_project], issues_visibility: "all">=>[#<User id: 11, login: "test1", firstname: "Test", lastname: "T", type: "User">],
#<Role id: 26, name: "Readers", permissions: [:view_documents, :view_files], issues_visibility: "default">=>[#<Group id: 835, login: "", firstname: "", lastname: "AA", type: "Group">, #<User id: 107, login: "testab", firstname: "Tommy", lastname: "Ab", type: "User">, #<User id: 111, login: "testxyz", hashed_password: "", firstname: "test", lastname: "xyz", type: "User">]}
@groups_by_role.class=ハッシュ
質問:ロールとそれぞれのユーザーまたはグループで出力を取得しています。ただし、ここで表示を変更したいと思います。ハッシュにグループのないユーザーのみが含まれている場合は、ユーザーのみを表示します。したがって、この出力{#<Role id: 18, name: "Project Manager", permissions: [:add_project, :edit_project, :close_project], issues_visibility: "all">=>[#<User id: 11, login: "test1", firstname: "Test", lastname: "T", type: "User">],
ではユーザーのみが含まれているため、ユーザーを表示します。これは、ユーザーのみがあり、グループはないため、正常に機能します...
しかし、ハッシュにユーザーとグループの両方が含まれている場合は、グループ名のみを表示し、ユーザーは表示しません。現在、次の例のようにユーザーとグループが表示されます。#<Role id: 26, name: "Readers", permissions: [:view_documents, :view_files], issues_visibility: "default">=>[#<Group id: 835, login: "", firstname: "", lastname: "AA", *type: "Group"*>, #<User id: 107, login: "testab", firstname: "Tommy", lastname: "Ab", *type: "User"*>, #<User id: 111, login: "testxyz", hashed_password: "", firstname: "test", lastname: "xyz", type: "User">]}
ビューまたはコントローラー内で条件を渡し、ハッシュがユーザーとグループの両方を返すかどうかを確認する方法はありますか?グループのみを表示する必要があります。誰かがこれで私を助けてくれますか?どんな助けでも本当にありがたいです。