在使用命中db的类方法的模型上使用devise_for时,rake db:migrate失败

时间:2012-04-08 06:23:47

标签: ruby-on-rails ruby devise

我的用户模型使用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我应该添加add吗?每次我想使用column_names方法?还是有更好的方法来处理这个问题?

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是列出您希望管理员使用的属性。测试桌子存在或做一些救援可能会模糊你的意图。