2013-07-16 5 views
4

При использовании изобрести я получаю эту ошибку, когда я пытаюсь загрузить страницу регистрации с новым полем „Имя пользователя“Rails: Придумайте: неопределенный метод `имя пользователя»

undefined method `username' for #<User:0x007f8c8e347f48> 

Это в завещанию при регистрации:

3: <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 
4: <%= f.error_notification %> 
5: 
6: <%= f.input :username %> 
7: <%= f.input :email %> 
8: <%= f.input :password %> 
9: <%= f.input :password_confirmation %> 

Это в моделях user.rb

class User < ActiveRecord::Base 
# Include default devise modules. Others available are: 
# :token_authenticatable, :confirmable, 
# :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

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

Чтобы установить его, я поставил следующие команды через TERMI NAL:

rails generate migration AddUsernameToUsers username:string 
bundle exec rake db:migrate 

Через предыдущие вопросы я ставлю эти команды через терминал:

rake db:schema:load 

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

Редактировать

После перезапуска моего сервера несколько раз он теперь автоматически exiitng локальный сервер с этой ошибкой:

Called from: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-  3.2.8/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'. 
Exiting 
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:469:in `load': /Users/hunter/first_app/app/models/view.rb:11: syntax error, unexpected keyword_end (SyntaxError) 

Edit

Это в моделях/вид .rb:

class View < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

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

Редактировать

Я удалил запятую в конце: Remember_Me в модели/view.rb и теперь сервер работает. Теперь я могу загрузить его на localhost: 3000. Однако, когда я нажимаю на страницу регистрации, я получаю ту же ошибку, что и раньше.

+0

Если 'resource' не является экземпляром' User', у вас большие проблемы. – oldergod

+0

Я только начал изучать Rails, как я могу проверить, так ли это и как его исправить? Благодаря! –

+0

Перезапустили ли вы свой сервер после миграции? – Debadatt

ответ

1

Если вы хотите логин, используя либо имя пользователя или пароль, то у вас есть очень хорошее объяснение здесь: Devise login using your username or email address

Если вы хотите войти в систему только с помощью имени пользователя, вы должны изменить свой authentication_key от вашего завещанию .rb конфигурационный файл:

# ==> Configuration for any authentication mechanism 
    # Configure which keys are used when authenticating a user. The default is 
    # just :email. You can configure it to use [:username, :subdomain], so for 
    # authenticating a user, both parameters are required. Remember that those 
    # parameters are used only when authenticating and not when retrieving from 
    # session. If you need permissions, you should implement that in a before filter. 
    # You can also supply a hash where the value is a boolean determining whether 
    # or not authentication should be aborted when the value is not present. 
    config.authentication_keys = [ :username ] 

Также вам нужно будет изменить свои учетные записи и сеансы в соответствии с вашей аутентификацией.

В DEViSE/регистрации/new.html.erb:

3: <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 
4: <%= f.error_notification %> 
5: 
6: <%= f.input :username %> 
7: <%= f.input :password %> 
8: <%= f.input :password_confirmation %> 
9: 
10: <%= f.submit "Sign up" %> 

В DEViSE/регистрации/edit.html.erb:

3: <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 
4: <%= f.error_notification %> 
5: 
6: <%= f.input :username %> 

В DEViSE/сессий/new.html.erb :

3: <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 
4: 
5: <%= f.input :username %> 
6: <%= f.input :password %> 
7: 
8: <%= f.submit "Sign in" %> 
+0

Так это решение моей проблемы? Будет ли это работать, если я это сделаю? –

+0

Я прошел через все прохождение, и это не сработало, когда я добрался до: username, он дал мне ту же ошибку. 'undefined method 'username' для # ' –

+0

Вы изменили представления разработки в соответствии с вашим идентификационным_и_и_элементом? – ma3x

1

Немного поздно, но я решил поделиться своим ответом, поскольку у меня была такая же ошибка. Миграции недостаточно.Вам нужно добавить этот бит кода в application_controller.rb:

before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

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

Это будет делать трюк.

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