Я работаю с Rails 5
Я добавил новое имя пользователя в модели User.
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:username)
end
end
Во время регистрации отображается ошибка: undefined method `for 'for # Вы имели в виду? вилка
След:
NoMethodError (неопределенный метод `for 'для # Вы имели в виду? Fork):
app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters'
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms)
Кто может помочь? Как решить эту проблему?
ruby-on-rails
devise
ruby-on-rails-5
Дмитрий
источник
источник
Ответы:
According to the documentation:
источник
gem 'devise', '~> 3'
отсортировал его для меня.Если вы просто изменить
.for
к.permit
ней работает хорошо. Например:Он работает как в Rails 4.2.x, так и в Rails 5.0.x
источник
Не забывай
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
источник
Я думаю, вы пропустили account_update в методе configure_permitted_parameters вашего контроллера, вам нужно следовать шаблону разработки. У Devise есть страница обновления учетной записи. Вы можете найти это в views / devise / registrations / edit.html.erb, и ваш код также не будет работать на странице sign_up, здесь вы указали страницу sign_up
Чтобы обновить свою таблицу пользователей, в ту минуту, когда вы отправляете обновление в своих пользователях / редактировании, или если вы отправляете имя пользователя на странице регистрации, вам необходимо следовать этому шаблону разработки, чтобы обновить таблицу пользователей базы данных. Даже если вы добавили новый столбец в пользовательскую таблицу, вам придется добавить его в метод configure_permitted_parameters. В вашем случае это имя пользователя, но вы также пропустили account_update. Вы в основном говорите, что хотите обновить имя пользователя или добавить строку в поле имени пользователя, не следуя шаблону Devise. Любое поле, которое вы добавляете в таблицу User, должно соответствовать этому шаблону Devise. Также вы можете указать, какой странице разрешено обновлять это имя пользователя. В моем примере ниже я использую страницу обновления устройства. Итак, как я уже сказал, даже если вы добавили настраиваемое имя поля в таблицу Users, вам нужно следовать этому шаблону.
Затем убедитесь, что в вашем user.rb вы проверили имя пользователя в своей модели User.
источник
источник