新添加的列数据未保存到DB

时间:2014-05-04 18:01:41

标签: ruby-on-rails forms authentication ruby-on-rails-4 devise

我在我的Rails 4应用程序中使用Devise进行用户身份验证。最近我在User模型中添加了两个新列。它们是first_namelast_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) 

1 个答案:

答案 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强参数部分。

相关问题