Ruby on rails 从方法返回html
我试图直接从模型方法返回HTML,以显示对主题的最后回复 我的主题模型:Ruby on rails 从方法返回html,ruby-on-rails,Ruby On Rails,我试图直接从模型方法返回HTML,以显示对主题的最后回复 我的主题模型: class Topic < ActiveRecord::Base has_many :replies def last_reply self.replies.last.name end end 我害怕这样做,因为有人嵌入了JavaScript或其他东西作为回复名。我有验证来阻止这一切,但我仍然希望加倍安全。如果要显示嵌入的JavaScript,我显然希望它在页面上显示,而不是由
class Topic < ActiveRecord::Base
has_many :replies
def last_reply
self.replies.last.name
end
end
我害怕这样做,因为有人嵌入了JavaScript或其他东西作为回复名。我有验证来阻止这一切,但我仍然希望加倍安全。如果要显示嵌入的JavaScript,我显然希望它在页面上显示,而不是由浏览器处理。html_safe会这样做吗
我应该在装饰师或助手中这样做吗?我觉得ERB标签中不应该有“编程”,因为它们应该只包含一个方法调用来显示信息:
视图:
我仍然想知道如何返回没有语音标记的HTML。我可能可以使用.gsub方法来消除它们,但我想知道如何正确地进行 逻辑上topic.last_reply应该返回最后一条记录-一个对象。您可以通过作用域或方法来实现这一点。然后我会将它传递给helper,或者只是创建一个带有getting topic.last reply和partial rendering的helper topic\u last\u reply您将无法了解如何正确执行,因为这一切都不正确。使用Rails就是要遵守惯例,正确地使用控制器。@wurde不应该只使用胖模型和瘦控制器吗?创建实例方法而不是控制器方法将使以后的开发更容易,因为每当我需要得到最后一个回复时,我只需要发出一个.last_回复,无论我在应用程序中的什么位置,即使我正在创建一个邮件器。这感觉更好,即使这不符合DRY的利益,共享控制器方法也会像实例方法一样保存尽可能多的字符,但它仍然会理顺控制器。@wurde我同意Starkers;对于视图帮助程序或其他类似构造,这是非常理想的情况。你觉得在这种情况下违反了什么惯例?我同意“查看助手”是一个很好的解决方案。
<%= topic.last_reply %>
def last_reply
self.replies.last.name.html_safe
end
<%= decorate_last_reply %>
def decorate_last_reply
model.last_reply #=> "Yep a string I am"
end