Ruby on Rails:添加其他字段以设计用户模型时出错

时间:2014-12-22 07:07:04

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我正在尝试添加字段'first name','last name'和'phone'。但是,在重新访问本地主机时,我总是会收到此错误:

NoMethodError in Devise::RegistrationsController#new

undefined method `configure_permitted_parameters' for #<Devise::RegistrationsController:0x00000101fcd008>

这就是我所做的:

首先,我创建了一个注册控制器:

class RegistrationsController < Devise::RegistrationsController
    before_filter :configure_permitted_parameters, :only => [:create]

  protected



       def configure_permitted_parameters
            devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :phone, :email, :password, :password_confirmation) }
        end
end

然后,我跑了:

rails g migration AddFieldsToUsers first_name:string last_name:string phone:int

接下来是:

rake db:migrate

在终端......

然后我去了

      t.string :first_name,
      t.string :last_name,
      t.integer :phone,

在设计中创建用户迁移文件。

我也尝试在addFieldsToUsers迁移文件中将add_column替换为t.string:

class AddFieldsToUsers < ActiveRecord::Migration
  def change
    t.string :users, :first_name, :string
    t.string :users, :last_name, :string
    t.integer :users, :phone, :int
  end
end

如果有人可以帮助解决这个问题,我将非常感激。谢谢。

3 个答案:

答案 0 :(得分:1)

首先 - about migration

class AddFieldsToUsers < ActiveRecord::Migration
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
    add_column :users, :phone, :integer
  end
end
  

$ rake db:migrate

其次 - 关于rails4中的权限:

这个有用的https://stackoverflow.com/a/19793371/3563993this

<强> application_contoller.rb

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  ...

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :first_name, :last_name, :fone) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :first_name, :last_name, :fone) 
  end
end

答案 1 :(得分:0)

在attr_accessible:用户类之后放置first_name,last_name,phone。 如果您使用的是rails 3

答案 2 :(得分:0)

您应该根据设计documentation在应用程序控制器中添加操作configure_permitted_parameters

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end

您的错误直接表明您没有configure_permitted_parameters方法进行新操作。