3

私の User モデルは column_names メソッドを使用して、管理者のすべての列で mass_assignment を許可します。

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

つまり、「rake db:migrate RAILS_ENV=test」でユーザー テーブルを作成したい場合です。私は得る

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

完全なトレースはhttp://pastie.org/3748502にあります

テーブルが存在しないことはわかっているので、移行を実行する必要がありますが、どういうわけか、 rake db:migrate RAILS_ENV=test はルートをリロードし、devise_for を呼び出し、devise_for はデバイス マッピングを追加するときに User クラスをロードし、column_names メソッドを呼び出します。まだ存在しないテーブルに。

それで、これをきれいに処理する方法が本当にわかりませんか?table_exists を追加する必要がありますか? column_names メソッドを使用するたびに? または、この問題を処理するためのより良い方法はありますか?

4

1 に答える 1

0

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

于 2012-04-08T09:46:37.900 に答える