Разработать, как добавить дополнительное поле в форму создания пользователя? - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь добавить имя пользователя к моему пользователю при создании.

В устройстве / регистрации / новые у меня есть:

<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], и в представлении отображается следующая ошибка:

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 в свою модель, но как мне получить доступ к params[:username] в моем контроллере?

Ответы [ 4 ]

13 голосов
/ 19 декабря 2013

Рельсы 4 перемещают параметры очистки в контроллер.

Один из способов добавить настраиваемые поля для devise - это добавить фильтр предварительного просмотра в Application 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

Это один из способов, и я настоятельно рекомендую ознакомиться с документами по ссылке выше, чтобы узнать больше о настройке устройства для определенных полей.

1 голос
/ 01 марта 2013

Добавьте поле имени пользователя в attr_accessible в app / model / user.rb

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :username

Взято из комментария № 1 выше, чтобы другие могли легко увидеть решение

0 голосов
/ 21 марта 2015

Если вы хотите добавить FirstName, LastName или какой-либо столбец во время регистрации пользователя, вы должны настроить этот столбец с учетом разрешенных параметров.

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

  protected

  def configure_new_column_to_devise_permitted_parameters
    registration_params = [:first_name, :last_name, :email, :password, :password_confirmation]
    if params[:action] == 'create'
      devise_parameter_sanitizer.for(:sign_up) { 
        |u| u.permit(registration_params) 
      }
    elsif params[:action] == 'update'
      devise_parameter_sanitizer.for(:account_update) { 
        |u| u.permit(registration_params << :current_password)
      }
    end
  end    
end

Например: чтобы добавить еще один столбец, например alternate_email, при регистрации пользователя, просто добавьте столбец alternate_email в registration_params

registration_params = [: first_name,: last_name,: email,: пароль, : password_confirmation,: alternate_email]

E-mail]

0 голосов
/ 24 июля 2013

Rails 4 Strong Params способ добавить в контроллер

https://github.com/plataformatec/devise#strong-parameters

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...