【问题标题】:rails undefined method `attr_accessible'rails未定义方法`attr_accessible'
【发布时间】:2014-08-26 03:07:51
【问题描述】:

我正在尝试将身份验证系统添加到我的应用程序中,但在运行“rake db:migrate”时遇到了此错误:

NoMethodError: undefined method `attr_accessible' for User (call 'User.connection' to establish a connection):Class
/Users/liferaymac/Desktop/check/app/models/user.rb:8:in `<class:User>'
/Users/liferaymac/Desktop/check/app/models/user.rb:1:in `<top (required)>'
/Users/liferaymac/Desktop/check/config/routes.rb:2:in `block in <top (required)>'
/Users/liferaymac/Desktop/check/config/routes.rb:1:in `<top (required)>'
/Users/liferaymac/Desktop/check/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

这是我的 user.rb 文件的视图,这是我的模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation
end

这是我的迁移文件:

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      # t.confirmable
      t.recoverable
      t.rememberable
      t.trackable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both

      t.timestamps
    end

    add_index :users, :email,                :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :unlock_token,         :unique => true
  end

  def self.down
    drop_table :users
  end
end

# migration
create_table(:users) do |t|
  t.database_authenticatable :null => false
  # t.confirmable
  t.recoverable
  t.rememberable
  t.trackable
  # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both

  t.timestamps
end

add_index :users, :email,                :unique => true
# add_index :users, :confirmation_token,   :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :unlock_token,         :unique => true

我在 http://railscasts.com/episodes/209-introducing-devise?autoplay=true 工作 我还运行了 bundle install 并已经安装了设计 gem。 任何见解将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    来自 Rails 指南:

    Rails 4.0 删除了 attr_accessible 和 attr_protected 功能 支持强参数。您可以使用受保护的属性 gem 顺利升级。

    来源:http://guides.rubyonrails.org/upgrading_ruby_on_rails.html

    您可能希望保留 attr_accessible 方法,否则在使用注册表单创建用户时会遇到错误。您可以捆绑 protected_attributes gem,让您可以访问模型中的这些方法。

    受保护的属性:https://github.com/rails/protected_attributes

    【讨论】:

    • 感谢 sealocal 的建议,我已将其添加到我的模型中。
    • 没问题!这应该可以让您通过 RailsCasts 视频,然后您可以切换到使用强参数的 Rails 4 方式。
    【解决方案2】:

    我意识到在 Rails 4+ 中没有“attr_accessible”。我从我的模型中删除了它,现在它可以工作了。 (应该从旧视频中预料到这一点......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多