Piszę model, który obsługuje dane wejściowe użytkownika z obszaru tekstowego. Zgodnie z radą z http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input , czyszczę dane wejściowe w modelu przed zapisaniem do bazy danych, używając metody before_validate oddzwonić.
Odpowiednie części mojego modelu wyglądają następująco:
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
Nie trzeba dodawać, że to nie działa. Gdy próbuję zapisać nowy wpis, pojawia się następujący błąd.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Wygląda na to, że SanitizeHelper tworzy instancję HTML :: WhiteListSanitizer, ale kiedy mieszam ją z moim modelem, nie może znaleźć HTML :: WhiteListSanitizer. Czemu? Co mogę z tym zrobić, aby to naprawić?
źródło
stack level too deep
. Znajduje się w metodzie before_save.To daje tylko metodę pomocniczą bez efektów ubocznych ładowania każdej metody ActionView :: Helpers do twojego modelu:
źródło
To działa lepiej dla mnie:
Prosty:
Postęp:
Źródło: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
źródło
ApplicationController.master_helper_module
Nie istnieje dłużej w Rails 3 i 4 wydaje. AleApplicationController.helpers
jest ładny.Aby uzyskać dostęp do pomocników z własnych kontrolerów, po prostu użyj:
źródło
ApplicationController.helpers.order_number(@order)
. To znaczy, żeorder_number
zlokalizowano dniaOrder Helper
Nie polecałbym żadnej z tych metod. Zamiast tego umieść go we własnej przestrzeni nazw.
źródło
Jeśli chcesz skorzystać z modelu
my_helper_method
inside a, możesz napisać:źródło