Saya sedang menulis model yang menangani input pengguna dari area teks. Mengikuti saran dari http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input , saya membersihkan input dalam model sebelum menyimpan ke database, menggunakan before_validate panggilan balik.
Bagian yang relevan dari model saya terlihat seperti ini:
include ActionView::Helpers::SanitizeHelper
class Post < ActiveRecord::Base {
before_validation :clean_input
...
protected
def clean_input
self.input = sanitize(self.input, :tags => %w(b i u))
end
end
Tak perlu dikatakan, ini tidak berhasil. Saya mendapatkan error berikut saat mencoba dan menyimpan Postingan baru.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Rupanya, SanitizeHelper membuat sebuah instance dari HTML :: WhiteListSanitizer, tetapi ketika saya mencampurnya ke dalam model saya, ia tidak dapat menemukan HTML :: WhiteListSanitizer. Mengapa? Apa yang dapat saya lakukan untuk memperbaikinya?
sumber
stack level too deep
. Ini ada dalam metode before_save.Ini memberi Anda metode helper tanpa efek samping dari memuat setiap metode ActionView :: Helpers ke dalam model Anda:
sumber
Ini bekerja lebih baik untuk saya:
Sederhana:
Muka:
Sumber: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
sumber
ApplicationController.master_helper_module
ada lagi di Rails 3 dan 4 tampaknya. TapiApplicationController.helpers
itu bagus.Untuk mengakses pembantu dari pengontrol Anda sendiri, cukup gunakan:
sumber
ApplicationController.helpers.order_number(@order)
. Itu berarti lokasiorder_number
itu berada padaOrder Helper
Saya tidak akan merekomendasikan salah satu metode ini. Sebagai gantinya, taruh di dalam namespace-nya sendiri.
sumber
Jika Anda ingin menggunakan bagian
my_helper_method
dalam model, Anda dapat menulis:sumber