ruby-on-rails - rake 数据库 :migrate fails when using devise_for on models that use class methods that hit the db

标签 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 在添加设计映射时加载用户类,从而调用尚不存在的表上的 column_names 方法。

所以我不太确定如何干净利落地处理这个问题?如果 table_exists 我应该添加 add 吗?每次我想使用 column_names 方法?还是有更好的方法来处理这个问题?

最佳答案

我认为最简洁的方法是列出您希望管理员可用的属性。测试表是否存在或使用 rescue 做某事可能会掩盖您的意图。

关于ruby-on-rails - rake 数据库 :migrate fails when using devise_for on models that use class methods that hit the db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060839/

相关文章:

ruby-on-rails - 如何将产品的 id 传递给引导模式

ruby-on-rails - 嵌套 :has_many, :通过属性

ruby-on-rails - 设备寄存器问题

html - 在 "link_to"erb 标签中插入一个 HTML 元素?

ruby-on-rails - 在 Rails 中播种数据库的最佳方法是什么?

ruby-on-rails - 条件匹配时跳出循环

ruby-on-rails - 样式化 ERB 的最佳实践

ruby-on-rails - 如何在ActiveRecord中动态设置belongs_to关联?

ruby-on-rails - 如何限制用户只能编辑他们的记录

ruby-on-rails - 设计测试助手 - sign_in 不起作用