Saya bekerja dengan Rails 5
Saya menambahkan nama pengguna bidang baru dalam model Pengguna.
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
Selama registrasi ditampilkan kesalahan: metode tidak ditentukan `untuk 'untuk # Maksud Anda? garpu
Jejak:
NoMethodError (metode tidak ditentukan `untuk 'untuk # Maksud Anda? Garpu):
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)
Siapa yang bisa membantu? Bagaimana mengatasi masalah ini?
ruby-on-rails
devise
ruby-on-rails-5
Dmitriy
sumber
sumber
Jawaban:
According to the documentation:
sumber
gem 'devise', '~> 3'
mengurutkannya untuk saya.Jika Anda hanya mengubahnya
.for
menjadi.permit
berfungsi juga. Sebagai contoh:Ia bekerja di Rails 4.2.x dan Rails 5.0.x
sumber
Jangan lupa
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
sumber
Saya pikir Anda melewatkan account_update dalam metode konfigurasi_permitted_parameters pengontrol Anda, Anda harus mengikuti pola rancangan. Devise memiliki halaman pembaruan akun. Anda dapat menemukannya di views / devise / registrations / edit.html.erb, dan kode Anda juga tidak akan berfungsi di halaman sign_up, di sini Anda menentukan halaman sign_up
Untuk memperbarui tabel pengguna Anda, begitu Anda mengirimkan pembaruan di pengguna / edit Anda, atau jika Anda mengirimkan nama pengguna di halaman sign_up, Anda harus mengikuti pola rancangan ini, untuk memperbarui tabel pengguna database. Meskipun Anda menambahkan kolom baru ke tabel pengguna, Anda harus menambahkannya ke metode configure_permitted_parameters. Dalam kasus Anda itu adalah nama pengguna, tetapi Anda juga melewatkan pembaruan_akun. Pada dasarnya Anda mengatakan bahwa Anda ingin memperbarui nama pengguna atau menambahkan string ke bidang nama pengguna tanpa mengikuti pola Rancangan. Setiap bidang yang Anda tambahkan ke tabel Pengguna harus mengikuti pola Rancangan ini. Anda juga dapat menentukan halaman mana yang diizinkan untuk memperbarui nama pengguna ini. Dalam contoh saya di bawah ini, saya menggunakan halaman pembaruan perangkat. Jadi seperti yang saya katakan, meskipun Anda menambahkan nama bidang khusus ke tabel Pengguna, Anda harus mengikuti pola ini.
Selanjutnya pastikan di user.rb Anda memiliki nama pengguna yang valid di model Pengguna Anda.
sumber
sumber