2017-07-15 98 views
0

我试图在rails 5中从头开始进行身份验证,并且我的用户信息在输入注册表单时没有被保存。我也收到此错误轨道:::加载ActiveModel ForbiddenAttributesError如何将我的用户信息从注册表单保存到数据库?

@user = User.new(PARAMS [:用户])

class User < ApplicationRecord 

attr_accessor :password 
before_save :encrypt_password 

validates_confirmation_of :password 
validates_presence_of :password, :on => :create 
validates_presence_of :email 
validates_uniqueness_of :email 

def self.authenticate(email, password) 
user = find_by_email(email) 
if user && user.password_hash == BCrypt::Engine.hash_secret(password, 
user.password_salt) 
user 
else 
nil 
end 
end 

def encrypt_password 
if password.present? 
    self.password_salt = BCrypt::Engine.generate_salt 
    self.password_hash = BCrypt::Engine.hash_secret(password, 
password_salt) 
end 
end 
end 



<h1>Sign Up</h1> 

<%= form_for @user do |f| %> 
<% if @user.errors.any? %> 
<div class="error_messages"> 
<h2>Form is invalid</h2> 
<ul> 
<% for message in @user.errors.full_messages %> 
<li><%= message %></li> 
<% end %> 
</ul> 
</div> 
<% end %> 
<p> 
<%= f.label :email %><br /> 
<%= f.text_field :email %> 
</p> 
<p> 
<%= f.label :password %><br /> 
<%= f.password_field :password %> 
</p> 
<p> 
<%= f.label :password_confirmation %><br /> 
<%= f.password_field :password_confirmation %> 
</p> 
<p class="button"><%= f.submit %></p> 
<% end %> 



class UsersController < ApplicationController 
def new 
@user = User.new 
end 

def create 
@user = User.new(params[:user]) 
if @user.save 
redirect_to root_url, :notice => "Signed up!" 
else 
render "new" 
end 
end 
end 


class Post < ApplicationRecord 
has_secure_password 
end 

回答

1

,如果你从头开始创建请确保你有强大的参数声明中的每个控制器,让我解释一下,你在User.new(user_params)里面创建方法,user_params是我们通常放在类的底部的另一种方法,我们把方法def user_params,这个我们声明允许的字段/数据可以传递给我们的模型,因为你使用bcrypt宝石,我认为该领域是相同的如下

其他信息大多数轨道用户usi ng devise gem授权用户

class UsersController < ApplicationController 

    def create 
    @user = User.new(user_params) 
    # ... 
    end 

    private 

    def user_params 
    params.require(:user).permit(:username, :email, :password, :salt, :encrypted_password) 
    end 
end 
+0

非常感谢!所以对于铁轨来说很陌生,并试图将我的头包裹在它周围。 –

+0

如果它帮助和纠正你的问题,你可以通过检查我的答案旁边的标记来接受我的答案,所以这个问题标记为已解决 – widjajayd

+0

这有帮助,但我也需要删除attr_accessor。再次感谢:) –

相关问题