2012-04-08 3 views
3

My Userモデルでは、column_namesメソッドを使用してadminのすべての列に対してmass_assignmentを許可します。rake db:dbにヒットしたクラスメソッドを使用するモデルでdevise_forを使用すると、migrateが失敗する

class User < ActiveRecord::Base 

    attr_accessible :email, :password, :password_confirmation, :remember_me 
    attr_accessible *column_names, as: :admin 

end 

しかし、これは私がすくいデシベル」を介して、私のユーザーテーブルを作成したいとき、ある

Sandbox::Application.routes.draw do 
    devise_for :users 
end 

を設定して工夫している私のルートファイルとうまく再生されない:RAILS_ENV =テストを移行します"私はテーブルのdoesntのを知っているhttp://pastie.org/3748502

rake aborted! 
Mysql2::Error: Table 'sandbox_test.users' doesn't exist: SHOW FULL FIELDS FROM `users` 

完全トレースを取得、私は私の移行を実行する必要が理由です、存在するが、何らかの形で、すくいデシベル:移行RAILS_ENV =テストは、このようにdevise_for呼び出して、ルートを再ロードdevise_forは、deviseマッピングを追加するときにUserクラスをロードします。したがって、まだ存在しないテーブルに対してcolumn_namesメソッドを呼び出します。

だから私はきれいにこれをどう扱うかわからないのですか? table_existsがあればaddを追加すべきですか?毎回私はcolumn_namesメソッドを使用したいですか?またはこの問題を処理するより良い方法はありますか?

答えて

0

これを行う最もクリーンな方法は、管理者が利用できるようにする属性をリストすることだと思います。テーブルの存在をテストしたり、レスキューで何かをしたりすることは、あなたの意図をあいまいにする可能性があります。

+0

です。新しい列を追加するたびにその行を変更する必要があります – redgetan

関連する問題