Saya menggunakan permata alat untuk prosedur sign_in / sign_out.
Saya menghasilkan file tampilan dari merancang, menggunakan rails g devise views
Saya melihat ada file merancang / sesi / new.html.erb yang berisi formulir untuk sign_in.
Saya membuat file lain merancang / sesi / _form.html.erb dan melakukannya <%= render 'form' %>
dalam file new.html.erb, dan itu bekerja dengan sangat baik.
Sekarang, saya ingin memasukkan formulir ini dari pengontrol yang berbeda. Jadi dalam sebuah pengontrol yang disebut 'main', (khususnya, dalam halaman tampilan) 'mains / index.html.erb' saya memasukkan <%= render 'devise/sessions/form' %>
file. Tampaknya inklusi berfungsi dengan baik, tetapi saya mendapatkan kesalahan berikut.
NameError in Mains#index
Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:
undefined local variable or method `resource' for #<#<Class:0x007f1aa042d530>:0x007f1aa042b870>
Extracted source (around line #1):
1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <p><%= f.label :email %><br />
3: <%= f.text_field :email %></p>
4:
Tampaknya bagian form_for (sumber daya, ...) menyebabkan masalah (yang berfungsi dengan baik jika saya berada di halaman sign_in merancang yang asli ... Bagaimana saya bisa menyelesaikan masalah ini dengan cara rails?
Saya pribadi lebih suka menggunakan fungsi 'render' untuk memasukkan formulir, daripada menulis kode html sebaris.
Apakah saya harus menentukan sesuatu (sumber daya) di dalam pengontrol 'utama'?
Aku akan mengapresiasi bantuan mu. Terima kasih.
sumber
Jawaban:
Seperti yang dikatakan Andres, formulir tersebut memanggil bantuan yang ditentukan oleh Rancangan dan jadi tidak ada saat Anda mengakses formulir Rancangan dari pengontrol yang bukan Rancangan.
Untuk menyiasatinya, Anda perlu menambahkan metode berikut ini ke kelas helper controller yang ingin Anda tampilkan formulir di bawah. Atau, Anda bisa menambahkannya ke pembantu aplikasi Anda untuk membuatnya tersedia di mana saja.
Sumber: http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/
sumber
inherited_resources
.helper_method :resource_name, :resource_class, :resource, :devise_mapping
(yang:resource_class
tampaknya menjadi persyaratan dalam versi Rancangan yang lebih baru).Dapat mencoba ini juga ... periksa pertanyaan ini .
Sumber
sumber
Formulir yang Anda buat berfungsi saat ditampilkan dari pengontrol Devise karena "sumber" didefinisikan melalui Devise. Lihatlah implementasi dari Rancangan SessionsController - dari apa yang saya mengerti, Anda mencoba meniru tindakan "baru". Metode "build_resource" mungkin adalah yang Anda cari.
The Warden permata adalah di mana "sumber daya" benda berasal. Jika Anda ingin menggali lebih dalam, itu akan menjadi tempat untuk mencari.
sumber
Untuk memperbaiki jawaban yang diterima, kami menggunakan penolong ini untuk memungkinkan berbagai jenis sumber daya:
di mana
admin_controller?
ada sesuatu yang kita miliki sebelumnyaApplicationController
untuk menangani pengalihan login:sumber
Saya mendapatkan kesalahan yang sama dengan yang
undefined local variable or method "resource"
Anda gambarkan dari salah satu pengontrol saya, karena kelas dasar pengontrol saya kehilangan yang berikut ini (Rails-API ActionController :: API salah):Dengan demikian metode pembantu dari Rancangan tidak bisa diselesaikan dalam pandangan.
Untuk membuat Rancangan bekerja dengan Rails-API saya perlu menyertakan:
sumber