2012-05-03 3 views
0

現在のユーザーの属性に基づいて、ページにユーザーのリストを表示しようとしています。現在のユーザーのインスタンス変数が: "高校"という位置にある場合、: "大学"の位置のすべてのユーザーをリストします(逆も同様)。私はコントローラーでif elseステートメントを使ってこれを行うことを知っていますが、照会呼び出しが何をすべきかを理解することはできません。今私は持っている:Rails Controller Query

if current_user.position= "High School" 
    @user = User.all 
else 
    @user= User.all 

テンプレートとして。しかし、@ user =ステートメントを切り替える必要がありますが、制限する方法はわかりません。どんな助け?ありがとう!

<% @quizzes.each do |quiz| %> 
    <tr> 
    <td><h6><%= quiz.userName%></h6></td> 
    <td><h6><%= quiz.q1 %></h6></td> 
    <td><% for q in quiz.q2 %> 
     <% if q != nil %> 
     <h6><%= q %></h6> 
     <% end %> 
    <% end %> 
    <td><h6><%= quiz.q3 %></h6></td> 
    <td>X</td> 
    </tr> 
+0

あなたはレールのどのバージョンを使用していますか? –

答えて

2

のRails 3:

if current_user.position == "High School" 
    @user = User.where(:position => "College") 
else 
    @user = User.where(:position => "High School") 
end 

レール2:

if current_user.position == "High School" 
    @user = User.find_all_by_position("College") 
else 
    @user = User.find_all_by_position("High School") 
end 
+0

上記のコメントを参照 –

2

一つの可能​​な解決策は、モデルクラスにscopeを使用することです。

Userモデルでスコープ

class User < ActiveRecord::Base 
    ... 

    scope :college, where(position: 'College') 
    scope :highschool, where(position: 'High School') 
end 

とあなたのコントローラ内の定義、

if current_user.position == "High School" 
    @users = User.college 
else 
    @users = User.highschool 
end 

は、それが助けになると思います。

+0

スコープを追加してifステートメントを削除したい場合、次のようにすることができます: '@users = User.send current_user.position' – Max

+0

これは私が実際に馬鹿のように私の見解をレイアウトしていることに気付きました。もう一度私。私の見解は、クイズの表を載せています。そして、クイズはユーザーに属しています。したがって、ユーザーを更新すると、表示されているクイズに影響しません。ユーザーコントローラーの@quizzes変数を変更して、反対のvarialbeのユーザーに属するクイズのみを見つける方法を教えてください。私は自分のコードにテーブルを追加します。 –

1

おそらくこれはあなたが探しているものですか?

if current_user.position == "High School" 
    @users = User.where(:position => "College") 
else 
    @users = User.where(:position => "High School") 
end 
+0

上記のコメントを参照 –

関連する問題