텍스트 영역에서 사용자 입력을 처리하는 모델을 작성 중입니다. http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input 의 조언에 따라 before_validate를 사용하여 데이터베이스에 저장하기 전에 모델의 입력을 정리하고 있습니다. 콜백.
내 모델의 관련 부분은 다음과 같습니다.
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
말할 필요도없이 이것은 작동하지 않습니다. 새 게시물을 저장하려고하면 다음 오류가 발생합니다.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
분명히 SanitizeHelper는 HTML :: WhiteListSanitizer의 인스턴스를 생성하지만 내 모델에 혼합하면 HTML :: WhiteListSanitizer를 찾을 수 없습니다. 왜? 이 문제를 해결하려면 어떻게해야합니까?
답변
다음과 같이 첫 번째 줄을 변경하십시오.
include ActionView::Helpers
그것은 작동하게 할 것입니다.
업데이트 : Rails 3의 경우 :
ActionController::Base.helpers.sanitize(str)
신용은 lornc의 답변으로 이동
답변
이렇게하면 모든 ActionView :: Helpers 메서드를 모델에로드하는 부작용없이 도우미 메서드 만 제공됩니다.
ActionController::Base.helpers.sanitize(str)
답변
이것은 나를 위해 더 잘 작동합니다.
단순한:
ApplicationController.helpers.my_helper_method
전진:
class HelperProxy < ActionView::Base
include ApplicationController.master_helper_module
def current_user
#let helpers act like we're a guest
nil
end
def self.instance
@instance ||= new
end
end
출처 : http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
답변
자신의 컨트롤러에서 도우미에 액세스하려면 다음을 사용하십시오.
OrdersController.helpers.order_number(@order)
답변
이 방법 중 어느 것도 권장하지 않습니다. 대신 자체 네임 스페이스에 넣으십시오.
class Post < ActiveRecord::Base
def clean_input
self.input = Helpers.sanitize(self.input, :tags => %w(b i u))
end
module Helpers
extend ActionView::Helpers::SanitizeHelper
end
end
답변
my_helper_method
모델 내부 를 사용하려면 다음과 같이 작성할 수 있습니다.
ApplicationController.helpers.my_helper_method