ruby-on-rails - 设计如何向创建用户表单添加附加字段?

标签 ruby-on-rails ruby ruby-on-rails-3 devise

我正在尝试在创建时向我的用户添加用户名。

在设计/注册/新我有:

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>
  <p><%= f.label :username %><br />
  <%= f.text_field :username %></p>

  <p><%= f.label :email %><br />
  <%= f.email_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><%= f.submit "Sign up" %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

问题是没有 params[:username] 发送到 Controller ,我在 View 中收到以下错误:

ActiveRecord::StatementInvalid in Devise::RegistrationsController#create

Mysql::Error: Column 'username' cannot be null:
  INSERT INTO `users` (`email`, `encrypted_password`, `reset_password_token`,
  `reset_password_sent_at`, `remember_created_at`, `sign_in_count`,
  `current_sign_in_at`, `last_sign_in_at`, `current_sign_in_ip`, `last_sign_in_ip`,
  `created_at`, `updated_at`, `username`) VALUES ('mail@test.dk',
  '$2a$10$bWjAXLY8QGXrXeVrGciv2O6mjRF940lajBEsUOPPtPDhKyj0A/gia', NULL, NULL,
  NULL, 0, NULL, NULL, NULL, NULL, '2011-05-15 16:16:36', '2011-05-15 16:16:36',
  NULL)

Rails.root: C:/Rails/densjove
Application Trace | Framework Trace | Full Trace

Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"qkQ8L0ZonXYxWQ2f4cfdREZ222oa2zGUb/qll3TRxjQ=",
 "user"=>{"username"=>"hansen",
 "email"=>"mail@test.dk",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]"},
 "commit"=>"Sign up"}

我已将 username 列添加到我的模型中,但是如何访问我的 Controller 中的 params[:username]

最佳答案

Rails 4 将参数清理移至 Controller 。

为设计添加自定义字段的一种方法是在应用程序 Controller 中添加一个前置过滤器,调用一个方法来定义允许的参数。

代码来自 https://github.com/plataformatec/devise#strong-parameters

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end

上面的代码是如果你要添加一个名为用户名的字段。如果您要添加 first_name,它将是:

devise_parameter_sanitizer.for(:sign_up) << :first_name

这是一种方式,我强烈考虑阅读上面链接中的文档,以了解有关自定义设计以允许某些字段的更多信息。

关于ruby-on-rails - 设计如何向创建用户表单添加附加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009632/

相关文章:

ruby-on-rails - 部署后如何定义和运行 capistrano 3 任务?

ruby-on-rails - rails 3.1 事件记录插入或更新

ruby-on-rails - Rails 在搜索中组合多个列

ruby-on-rails - Rails 5 cipher.key "key must be 32 bytes"错误

ruby-on-rails - Rails : params in format. html { 渲染 ... }

ruby-on-rails - rails 3 验证字符串

ruby-on-rails - 多个 has_many 通过关系

javascript - Google map V3 InvalidValueError Rails 5

ruby - 导轨错误 : "Could not find gem ' activerecord-mysql2-adapter (>= 0) ruby' in the gems available on this machine

ruby-on-rails - 连接范围为 :has_many :through association