sementara saya menyadari bahwa Anda seharusnya menggunakan helper di dalam view, saya membutuhkan helper di controller saya karena saya sedang membangun objek JSON untuk kembali.
Bunyinya sedikit seperti ini:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
bagaimana saya bisa mengakses html_format
pembantu saya ?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-5
AnApprentice
sumber
sumber
Jawaban:
Catatan: Ini ditulis dan diterima kembali dalam Rails 2 hari; Saat ini jawaban Grosser adalah jalan yang harus ditempuh.
Opsi 1: Mungkin cara paling sederhana adalah dengan memasukkan modul helper Anda di controller Anda:
Opsi 2: Atau Anda dapat mendeklarasikan metode helper sebagai fungsi kelas, dan menggunakannya seperti:
Jika Anda ingin dapat menggunakannya sebagai fungsi instance dan fungsi kelas, Anda bisa mendeklarasikan kedua versi dalam helper Anda:
Semoga ini membantu!
sumber
html_format
- Anda hanya perluMyHelper.html_format
di versi kedua.link_to
. Pengontrol tidak memiliki akses ke metode ini dan sebagian besar pembantu saya menggunakan metode ini. Juga, termasuk helper ke controller memperlihatkan semua metode helper sebagai tindakan yang dapat diakses publik yang tidak baik.view_context
adalah cara untuk masuk dalam Rails 3.Kamu bisa memakai
helpers.<helper>
dalam Rails 5+ (atauActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 & 3 ) (PERINGATAN: ini instantiates tampilan instance baru per panggilan)@template.<helper>
( Rel 2 )singleton.helper
include
helper di controller (PERINGATAN: akan membuat semua metode helper menjadi aksi controller)sumber
view_context.helper_function
itu sederhana dan berfungsi dengan baik.ActionController::Base.helpers.helper_function
sama baiknya.view_context
= geniusview_context
. Ini akan membuat instance tampilan baru per panggilan ...ActionController::Base.helpers.helper_function
sepertinya tidak berfungsi. Saya dapatkanNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
ketika mencoba memanggilActionController::Base.helpers.spell_date_and_time()
metode pengontrol. panggilanview_context.spell_date_and_time()
tidak berhasil.helpers.helper_function
di controller Anda ( github.com/rails/rails/pull/24866 )Di Rails 5 gunakan
helpers.helper_function
di controller Anda.Contoh:
Sumber: Dari komentar oleh @ Markus pada jawaban yang berbeda. Saya merasa jawabannya pantas untuk dijawab sendiri karena merupakan solusi paling bersih dan mudah.
Referensi: https://github.com/rails/rails/pull/24866
sumber
helper
tunggal dan di controller itu jamak.Masalah saya diselesaikan dengan Opsi 1. Mungkin cara paling sederhana adalah dengan memasukkan modul pembantu Anda di controller Anda:
sumber
Secara umum, jika helper akan digunakan di (hanya) pengendali, saya lebih suka menyatakannya sebagai metode instance dari
class ApplicationController
.sumber
Di Rails 5+ Anda cukup menggunakan fungsi seperti yang ditunjukkan di bawah ini dengan contoh sederhana:
sumber
Di Rails 5+ cukup gunakan helper ( helpers.number_to_currency (10000) )
sumber