1

アプリケーションでユーザーを管理するためのCRUDインターフェイスに取り組んでいます。アプリ内の有効なユーザーロール(管理者、教師、学生)の名前を含む配列である一定のUser::ROLESがあります。

私がやりたいのは、コントローラーのインデックスアクションで、ROLES定数を反復処理し、@ usersからスコープ付きインスタンス変数を作成するブロック(ブロックの前に既に初期化されている)を用意することです。これまでのインデックスメソッドは次のようになります。

def index
    @users = user.all
    #@students = @users.where(:role => "student") # This works by itself
    User::ROLES.each do |r|
        @r = @users.where(:role => r.to_s)
    end
end

したがって、ブロックを通過したものでインスタンス変数に名前を付けられるようにしたいので、@rは@admin、@ teacherなどを作成します。私はrubyとrailsに慣れていないため、実行するための構文がよくわかりません。これ。知るか?とにかくそれを行うためのより良い方法があるでしょう。

編集

みんなに知らせるために、これをインデックスアクションのビューで使用して、役割ごとにグループ化されたユーザーのリストを表示したいと思っています。もちろん、CRUDインターフェース全体で他の方法でも使用されます。そのため、多目的であるため、以前はユースケースを明確にしませんでした。

4

1 に答える 1

6

これはおそらく悪い考えです。モデルのロールを変更した場合は、それに応じてビューを更新して、別のインスタンスメソッドを使用する必要があります。これを処理するためのより良い方法は、単にユーザーを役割別にグループ化することです。

@users = User.group(:role).all

これにより、動的ビューを構築するために簡単に使用できる、各ロールにちなんで名付けられたキーを持つハッシュが得られます。

<% @users.each_pair do |role, users| %>
  <h2><%= role.to_s.titlelize %></h2>
  <% users.each do |user| %>
    ...
  <% end %>
<% end %>

必要に応じて、特定の役割を持つユーザーにアクセスすることもできます。

<h2>Admin users:</h2>
<%= @users[:admin].map(&:name).to_sentence %>
于 2012-04-27T21:36:33.840 に答える