私のアプリケーションでユーザーを管理するためのCRUDインターフェイスの作業を進めています。私は一定のUser :: ROLESを持っています。これは、私のアプリ(admin、teacher、student)の有効なユーザ役割の名前を持つ配列です。ブロックを使用したインスタンス変数の名前付けと作成[Ruby-on-Rails]
私がしたいことは、コントローラのインデックスアクションで、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の新機能では、これを行うための構文がわかりません。知るか?とにかくそれを行うためのより良い方法があります。
EDIT
ただ、誰もが知っているように、私は彼らの役割によってグループ化されたユーザーのリストを表示するには、indexアクションのビューでこれを使用することを願っています。もちろん、それはCRUDインターフェース全体でも他の方法でも使用されます。なぜなら、これは多目的であるため、以前のユースケースを明確にしていないのです。
「あなたは、モデル内の役割を変更する場合は、別のインスタンスメソッドを使用してそれに応じてビューを更新する必要があります」。今あなたは自分と矛盾しています。 '@users [:admin]'で特定のロールにアクセスしている場合は、ロール名を変更した場合と全く同じようにビューを変更する必要があります。 –
ありがとうございます。私はグループメソッドとeach_pairについて知らなかった。それは大いに役立ちます。 – GorrillaMcD
なぜ、わからないのですか?グループメソッドが機能していませんでした。グループ化せずに通常のようにユーザーレコードを返しました。 '@users = User.all.group_by(&:role)'を実行してしまい、期待通りに動作しませんでした。 – GorrillaMcD