我在使用rails的设计时非常天真。我刚为员工注册创建了默认视图,我的表包含默认设计用户字段(如密码,电子邮件等)以及我的自定义字段,例如first_name
和last_name
。在new.html.erb
文件中,最初是这样的,
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email%>
</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 %>
<%= render "employees/shared/links" %>
我又添加了两个文本字段:
<h2>Sign up</h2>
<%= 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%>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email%>
</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 %>
<%= render "employees/shared/links" %>
但这两个参数first_name
和last_name
未在后调用中传递,因为我得到的错误是:
PG::NotNullViolation: ERROR: null value in column "first_name" violates not-null constraint DETAIL: Failing row contains (6, null, null, null, prabhjotsinghrai1@gmail.com, $2a$11$KpJ4wnRfgeJ.N7hqnamiyOMpABXtPw0VppB1KBV6sL4fpJs3pTLCS, null, null, null, 0, null, null, null, null, 2017-02-05 14:00:44.450243, 2017-02-05 14:00:44.450243). : INSERT INTO "employees" ("email", "encrypted_password", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"
我发现first_name
和last_name
未添加到INSERT
查询中。你能救我一下吗?
答案 0 :(得分:2)
当您添加到模型中的新属性不允许进行质量分配时,您可能遇到了问题。如果是这样,您需要使用first_name
和last_name
属性设置Devise的强参数,例如:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])
end
end
有关详细信息,请参阅Devise Strong Parameters。
PS 您可能希望为first_name
和last_name
的存在添加验证,因为您可以更好地处理错误(而不是从Postgres获取错误)