레일의 모델에서 render_to_string
은 어떻게합니까?레일즈 모델에서 render_to_string은 어떻게 작성합니까?
"모델에서 아무것도 렌더링하면 안됩니다. 렌더링은 컨트롤러와 뷰의 책임입니다." 날을 들어 보거나 문제를 해결할 수있는 더 좋은 방법을 제안하십시오.
내 모델은 우편물입니다. 이메일, 팩스가 아닙니다.
레일의 모델에서 render_to_string
은 어떻게합니까?레일즈 모델에서 render_to_string은 어떻게 작성합니까?
"모델에서 아무것도 렌더링하면 안됩니다. 렌더링은 컨트롤러와 뷰의 책임입니다." 날을 들어 보거나 문제를 해결할 수있는 더 좋은 방법을 제안하십시오.
내 모델은 우편물입니다. 이메일, 팩스가 아닙니다.
여기서 일하고 코드 :
# instance_vars must follow the '@name' convention.
#
def render_template(template_content, options={})
local_vars = options[ :local_vars ] || {}
instance_vars = options[ :instance_vars ] || {}
view = ActionView::Base.new(Rails::Configuration.new.view_path)
instance_vars.each do | name, value |
view.instance_variable_set(name, value)
end
rendering_options = {
:inline => template_content,
:type => :builder,
:locals => local_vars
}
view.render(rendering_options)
end
레일 2.3.14에서 테스트. 이 아이디어는 찾지 못했지만 편의성 방법으로 포장했습니다.
물론, 나는 당신이 찾아 레일 3에서이 작업을 수행하려면 때문에이 ;-)
레일 3에 대한 참고 사항 ActionView :: Base.new (Rails.root.join ('app', 'views')) – riley
우아한 솔루션을 찾고 있다면 아마도 ActionFaxer :: Base를 구현할 수 있습니다. ActionMailer::Base 구현을 따를 수는 있지만 팩스로 전문화 할 수 있습니다. 이 방법을 사용하면 render_to_string에 액세스 할 수 있습니다.
참고로이 경우 render_to_string을 모델에 추가하지 않고 대신 모델을 처리 할 Faxer 개념을 도입합니다.
모델 내에서 렌더링 템플릿을 임의로 지원해야하는 경우 erb 또는 다른 템플릿 언어 구현에 대해 직접 코딩 할 수 있습니다.
Faxer 개념에 대한 좋은 점은 전달을 전달하고 대기열에 넣고 배달을 보장하는 것과 같이 단순히 렌더링을 추상화 할 수 있다는 것입니다.
성공하면 어쩌면 끝내면 보석으로 바꿀 수 있습니다.
의 모델 렌더링 뷰를 옹호한다고 가정하지 않는,이 요점은 큰 도움이었다 :
루비의'to_s' 메쏘드 (거의 모든 것에 적용됩니다)는 무엇입니까? – bricker
레일즈 뷰를 'to_s'할 수 없습니다. – maletor
보기? 네가 모델이라고 말한 줄 알았는데? 약간의 의사 코드를 게시해야 할 수도 있습니다. 이제 나를 잃어 버렸습니다. :) – d11wtq