我的一個模型對象有一個「文本」列,其中包含網頁的完整HTML。如何直接從Rails控制器返回HTML?
我想編寫一個控制器動作,它直接從控制器直接返回此HTML,而不是像控制器上的其他動作一樣通過.erb模板傳遞它。
我的第一個想法是把這個動作放到一個新的控制器中,並用一個空的佈局製作一個自定義的.erb模板,在模板中只是<%= modelObject.htmlContent %>
- 但我想知道是否有更好的方法在Rails中做到這一點。
我的一個模型對象有一個「文本」列,其中包含網頁的完整HTML。如何直接從Rails控制器返回HTML?
我想編寫一個控制器動作,它直接從控制器直接返回此HTML,而不是像控制器上的其他動作一樣通過.erb模板傳遞它。
我的第一個想法是把這個動作放到一個新的控制器中,並用一個空的佈局製作一個自定義的.erb模板,在模板中只是<%= modelObject.htmlContent %>
- 但我想知道是否有更好的方法在Rails中做到這一點。
在你的控制器respond_to
塊,你可以使用:
render :text => @model_object.html_content
或:
render :inline => "<%= @model_object.html_content %>"
所以,像這樣:
def show
@model_object = ModelObject.find(params[:id])
respond_to do |format|
format.html { render :text => @model_object.html_content }
end
end
其作品對我來說
def show
@model_object = ModelObject.find(params[:id])
respond_to do |format|
format.html { render :inline => "<%== @model_object['html'] %>" }
end
end
在最新的Rails(4.1.x的),至少,這比接受的答案更簡單:
def show
render html: '<div>html goes here</div>'.html_safe
end
非常感謝,它也適用於rails 5 api-only :) – 2017-08-31 03:47:35
(疏)文檔在http://api.rubyonrails.org/classes/ActionView/Rendering .html以防其他人正在尋找它! :) – 2010-12-16 15:06:36
真的有必要使用'respond_to'塊嗎? 'render:text =>'
text
''在Rails 4中對我很好。我雖然'respond_to'只是爲了處理多個Accept-Types。 – 2013-11-21 12:23:04使用'render text:...'時,Rails 5會產生棄用警告。如果你想渲染HTML,使用'render html:...',對於文本使用'render plain:...'。 – 2017-07-05 07:21:58