2016-09-19 83 views
0

我在Rails 5.0.0上啓動一個新應用程序,並試圖使用bcrypt。我已經按照在bcrypt回購的方向,但缺少的東西當我越來越ActiveModel::ForbiddenAttributesError在Rails上啓用Bcrypt 5

這裏是user.rb

require 'bcrypt' 

class User < ActiveRecord::Base 
include BCrypt 

def password 
    @password ||= Password.new(password_hash) 
end 

def password=(new_password) 
    @password = Password.create(new_password) 
    self.password_hash = @password 
end 

has_many :trips 
end 

遷移的詳細信息:

class CreateUsers < ActiveRecord::Migration[5.0] 
    def change 
    create_table :users do |t| 
     t.string :first_name, null: false 
     t.string :last_name,  null: false 
     t.string :email,   null: false 
     t.string :password_hash, null: false 

     t.timestamps 
    end 
    end 
end 

users_controller .rb

class UsersController < ApplicationController 

    def create 
    user = User.new(params[:user]) 
    user.password = params[:password] 
    user.save! 
    end 

    def new 
    @user = User.new 
    end 

    private 

    def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) 
    end 
end 

這裏是堆棧跟蹤的開頭:

Started POST "/users" for ::1 at 2016-09-19 16:44:20 -0700 
Processing by UsersController#create as HTML 
    Parameters: {"utf8"=>"✓",  "authenticity_token"=>"GWJXon2Y914Y7m2NGPAj8wz+9O6EBO1OnrIcBBRis/ATMkaGMCRh6uE4PAxJOIE7mVrornt5PqOvxBjoOBo9ag==", "user"=>{"first_name"=>"test", "last_name"=>"test2", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create User"} 
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms) 


ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError): 

app/controllers/users_controller.rb:4:in `create' 
    Rendering /Users/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout 

回答

0

在我看來,你所得到的錯誤的原因是因爲該行

user = User.new(params[:user]) 

您正在嘗試通過的params :user。而在你user_params方法,

params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) 

:user是不是允許PARAMS之一。

你需要做的是改變

user = User.new(params[:user]) 

user = User.new(user_params) 

你需要調用user_params功能和傳遞爲User.new參數。

+0

是的,這就是爲什麼不應該從文檔複製/粘貼...謝謝! – Yaron