Разработать: Добавление имени пользователя - PullRequest
3 голосов
/ 17 июля 2011

Рельсы 3.1.RC4
Разработка 1.4.2

Я добавил столбцы first_name и last_name в таблицу пользователей устройства. Затем я использовал консоль, чтобы добавить first_name и last_name для моего первого пользователя.

Теперь мой application.html.erb отображает мое имя и фамилию благодаря следующему коду после того, как я убедился, что пользователь вошел в систему:

<%= current_user.first_name %> <%= current_user.last_name %>(<%= current_user.email %>)

Вот моя проблема: когда я пытаюсь зарегистрировать нового пользователя через созданную мной форму нового пользователя, first_name и last_name не сохраняются в базе данных или что-то в этом роде ... потому что, когда я вхожу в систему с новым пользователем код, который у меня есть на application.html.erb, не отображает имя и фамилию.

Вот текстовые поля для имени и фамилии в new.html.erb:

<p><%= f.label :first_name %><br />
   <%= f.text_field :first_name %></p>

<p><%= f.label :last_name %><br />
   <%= f.text_field :last_name %></p>

<p><%= f.label :email %><br />
   <%= f.email_field :email %></p>

Я также хотел бы знать, как добавить проверку для этих новых столбцов, которые я создал (имя и фамилия).

Заранее спасибо!

Ответы [ 4 ]

9 голосов
/ 17 июля 2011

По умолчанию devise защищает все атрибуты. Для любого атрибута, который вы хотите иметь возможность массового присвоения (например, через форму), вам необходимо явно разрешить его в вашей модели:

attr_accessible :first_name, :last_name

Это сработало в вашей консоли, потому что вы, вероятно, сделали что-то вроде этого:

@user = User.first
@user.first_name = "foo"
@user.save

Но это не будет работать, если атрибут недоступен:

@user = User.new(:first_name => "foo")
@user.save

В файле журнала должно появиться предупреждение «Невозможно массово назначить защищенные атрибуты».

Для проверки, ознакомьтесь с Rails docs или этим руководством . Например, чтобы обеспечить полное имя, добавьте

validates_presence_of :first_name, :last_name

к вашей модели.

0 голосов
/ 31 января 2015

Я решил проблему. это также будет работать для рельсов 4.

шаг 1: Первый

$ rails создает миграцию AddFieldToUsers first_name: строка last_name: строка

$ rake db: migrate

Шаг 2: Добавьте этот код в окно разработки

  <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, autofocus: true %>
  </div>

шаг 3: добавьте это в свой контроллер приложения

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name,:last_name,:email, :password) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name,:last_name,:email, :password) }
  end
0 голосов
/ 19 мая 2014

Добавьте ниже к вашему контроллеру приложения

protected

    def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) }
        devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) }


    end
0 голосов
/ 17 июля 2011

Я думаю, вы забыли установить attr_accessible для своих новых атрибутов.

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