我在我的Rails 4应用程序中使用Devise进行用户身份验证。最近我在User模型中添加了两个新列。它们是first_name
和last_name.
然后,我使用这两个属性的字段更新了登录表单。但是,在测试创建新用户时,两者都没有保存到数据库中。我认为这可能是一个批量分配问题,但我没有得到任何类型的数据库错误。用户已成功创建,但仅存储原始属性(email,password和password_confirmation)。有人可以帮忙吗?
以下是我的表单的代码:
<div class="row">
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="small-10 small-offset-0 columns">
<div class="row">
<div class="small-2 columns">
<%= f.label :first_name, class: 'right inline' %>
</div>
<div class="small-4 columns">
<%= f.text_field :first_name, id: 'right-label' %>
</div>
<div class="small-6 columns">
<!-- empty space -->
</div>
</div>
<div class="row">
<div class="small-2 columns">
<%= f.label :last_name, class: 'right inline' %>
</div>
<div class="small-4 columns">
<%= f.text_field :last_name, id: 'right-label' %>
</div>
<div class="small-6 columns">
<!-- empty space -->
</div>
</div>
<div class="row">
<div class="small-2 columns">
<%= f.label :email, class: 'right inline' %>
</div>
<div class="small-4 columns">
<%= f.email_field :email, id: 'right-label' %>
</div>
<div class="small-6 columns">
<!-- empty space -->
</div>
</div>
<div class="row">
<div class="small-2 columns">
<%= f.label :password, class: 'right inline' %>
</div>
<div class="small-4 columns">
<%= f.password_field :password, id: 'right-label' %>
</div>
<div class="small-6 columns">
<!-- empty space -->
</div>
</div>
<div class="row">
<div class="small-2 columns">
<%= f.label :password_confirmation, class: 'right inline' %>
</div>
<div class="small-4 columns">
<%= f.password_field :password_confirmation, id: 'right-label' %>
</div>
<div class="small-6 columns">
<!-- empty space -->
</div>
</div>
<div class="row">
<div class="small-2 columns">
<!--placeholder -->
</div>
<div class="small-10 columns">
<%= f.submit "Create account", class: 'button small' %>
</div>
</div>
<div class="row">
<div class="small-2 columns">
<!--placeholder -->
</div>
<div class="small-10 columns">
<%= render "devise/shared/links" %>
</div>
</div>
</div>
<div class="small-3 columns">
<!-- nothing here -->
</div>
<% end %>
</div>
来自控制台的我的模型信息显示已添加属性:
User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime, first_name: string, last_name: string)
答案 0 :(得分:5)
根据Rails 4强大的参数,您需要让设计知道现在允许这些新参数。您可以将以下内容添加到应用程序控制器:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :first_name << :last_name
end
end
有关使用带有设计的Rail 4强参数的更多信息,请参阅Devise README的强参数部分。