2012-03-28 4 views
0

WICE_GRIDを使用しているRails 3.1.1アプリで作業していますが、このエラーが発生しました。 ユーザーショーページにロールのグリッドを表示したいとします。私はこのようなコントローラのデータを設定しています。 ユーザーとロールは、has_many〜user_roleによって関連付けられます。問題のあるWice :: WiceGridArgumentError

def show 
    @user = User.find(params[:id]) 
    @roles = initialize_grid(@user.roles) 
end 

私は、サイトを実行すると、私は

このエラーが出る
Wice::WiceGridArgumentError in UsersController#show 
WiceGrid: ActiveRecord model class (second argument) must be a Class derived from ActiveRecord::Base 

エラーは= INIT ....ライン@Rolesを指しています。 initialize_gridはレコードの引数を取るが、それはオプションのハッシュであり、アクティブレコードモデルのコレクションではない。 私はコンソールでコードを実行すると、私はuser.roles @

[#<Role id: 1, title: "Role1>, #<Role id: 2, title: "Role2">] 

は私にActiveRecordのコレクションのように見えていることがわかります。

ありがとうございました!

答えて

0

initialize_gridはクラスをとります。あなたはオブジェクトの配列を渡しています。グリッドにユーザーの役割を表示すると思われます。あなたはこのようなものが欲しい:

def show 
    @user = User.find(params[:id]) 
    @roles = initialize_grid(Role, :conditions => ['user_id = ?', @user.id]) 
end 

しかし、私はあなたの役割のテーブルがuser_idを持っていないと推測している。 user_rolesというマッピングテーブルがあります。その場合は、上記のコードをリファクタリングする必要があります。代わりにこのコードを実行して、グリッド内にロールを表示できるようにしてください(スコープなし)。

def show 
    @user = User.find(params[:id]) 
    @roles = initialize_grid(Role) 
end 
+0

私はinitialize_grid()がどのように動作するのか誤解していると思います。ご協力いただきありがとうございます! – John