2012-01-30 1 views
0

Многие люди говорят, что вы просто должны добавить атрибут :username в модели пользователя, если вы хотите создать :username атрибут:Необходимо добавить столбец имени пользователя в приложение (используя Devise,), чтобы добавить этот атрибут?

user.rb:

attr_accessible :email, :password, :password_confirmation, :remember_me, :username 

Я не уверен, если что-то вроде :username уже назначено в базе данных (точно так же, как вы устанавливаете Devise.)

Если нет, то как я могу добавить его в базу данных и что мне еще нужно делать? (Извините, я новичок Rails.)

ответ

2

Да, по крайней мере для Devise 2.0 вам нужно username в вашей базе данных, если вы хотите его сохранить.

Создать миграцию - это добавит скрипт для создания поля имени пользователя в вашей пользовательской таблице. Выполните следующее из своего терминала.

$ rails generate migration add_username_to_user username:string 

перспективе миграция (опять же из терминала)

$ rake db:migrate 

После этого ваша user таблица будет иметь username поле добавил к нему.

Затем вам нужно будет отредактировать представления Devise, чтобы пользователи могли зарегистрироваться с именем пользователя. Для этого взгляните на раздел «Настройка видов» на github Devise page

Но в основном для создания представлений разработки необходимо запустить следующее: по умолчанию они хранятся в модуле разработки, поэтому вы не видите их на диске)

$ rails generate devise:views 

Затем зайдите и отредактируйте соответствующий файл вида. Для регистрации это

app/views/devise/registrations/new.html.erb 

Вы также захотите указать имя пользователя на странице редактирования. Это под

app/views/devise/registrations/edit.html.erb 

Вам нужно добавить current_user.username где-то на этом «редактировать» вид. Но вы получите ошибку говоря, вы не можете получить доступ к username так делают его доступным атрибутом

# User.rb - this is your user model 
attr_accessible :username 

Тебе повезло, что я только что сделал это вчера, так что я помню все шаги :)

+0

Спасибо! Мне очень повезло. Привет, но у меня проблема в new.html.erb. Я сделал это: '

<%= f.label :username %>
<%= f.username_field :username %>
', но я получаю эту ошибку: 'undefined method' username_field 'для # ' – alexchenco

+0

Ничего, сделайте это с помощью' f.text_field'. Благодаря! – alexchenco

0

Нет, вам не нужно это делать. Если я правильно помню, столбец имени по умолчанию называется «login». Чтобы получить доступ, что под именем пользователя, вы можете просто создать виртуальный атрибут в классе User, как:

def username 
    login 
end 

это будет просто вернуть значение входа, как имя пользователя.

Вы можете узнать больше о виртуальных атрибутов здесь:

http://railscasts.com/episodes/16-virtual-attributes

EDIT:

DTY является правильным, что этот столбец не существует, поэтому для получения подробной информации о делать это:

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address

+0

Возможно, это была более старая версия Devise? Начиная с версии Devise 2.0 в таблице, созданной Devise, нет поля с именем 'login'. – Dty

+0

Да, вы на самом деле правы, вы можете найти подробную информацию здесь: https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username- или-электронный-адрес – Spyros

Смежные вопросы