Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从方法返回html_Ruby On Rails - Fatal编程技术网

Ruby on rails 从方法返回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,我显然希望它在页面上显示,而不是由

我试图直接从模型方法返回HTML,以显示对主题的最后回复

我的主题模型:

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