2016-11-16 62 views
0

在rails上我使用devise进行身份验证,并将第一个和最后一个名称字段添加到数据库中。新观点看起来像Ruby on Rails设计不允许所有字段

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
 
    <%= devise_error_messages! %> 
 

 
    <div class="field"> 
 
     <%= f.label :first_name %><br /> 
 
     <%= f.text_field :first_name, autofocus: true %> 
 
    </div> 
 

 
    <div class="field"> 
 
     <%= f.label :last_name %><br /> 
 
     <%= f.text_field :last_name, autofocus: true %> 
 
    </div> 
 

 
    <div class="field"> 
 
    <%= f.label :email %><br /> 
 
    <%= f.email_field :email, autofocus: true %> 
 
    </div> 
 

 
    <div class="field"> 
 
    <%= f.label :password %> 
 
    <% if @minimum_password_length %> 
 
    <em>(<%= @minimum_password_length %> characters minimum)</em> 
 
    <% end %><br /> 
 
    <%= f.password_field :password, autocomplete: "off" %> 
 
    </div> 
 

 
    <div class="field"> 
 
    <%= f.label :password_confirmation %><br /> 
 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
 
    </div> 
 

 
    <div class="actions"> 
 
    <%= f.submit "Sign up" %> 
 
    </div> 
 
<% end %>

控制器看起来像这样

private 

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

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

创建帐户时,我收到了成功的请求,但我当我看到数据库只名字属性显示而不是姓氏属性。形成sql查询生成的只有名字属性被插入到sql语句中。

回答

0

有几件事情,你可以尝试:

首先做一个爆炸类允许所有变量的形式进入,看看是否姓氏被保存。通过声明.permit!并删除(:email, :password, :password_confirmation, etc...)

如果last_name在敲打该类时得到保存 - 您应该看看是否在form_for标记中输入正确的类可以帮助您。

<%= form_for(user, as: user, url: registration_path(user)) do |f| %> 

如果不是,看在你的数据库/模式文件,看看是否意外迁移姓氏作为字符串以外的东西。

1

检查下面的代码,它会帮助你

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

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.permit(:sign_up) do |user_params| 
      user_params.permit({ roles: [] }, :email, :password, :password_confirmation) 
     end 
    end 
end 

而对于额外的帮助阅读Devise强参数的话题。