从助手返回html

时间:2014-04-18 15:49:01

标签: ruby-on-rails

我正在使用装饰器,但如果我使用帮助器则会出现同样的问题。

我尝试做的只是显示user_ma,e /

我有这个嵌入式ruby标签:

<%= decorate_user_name %>

这是辅助/装饰器方法:

def decorate_user_name
    "prepended string #{h.link_to('my_link', h.my_link_path )}"
end

但是,这会返回此html:

"prepended string  <a href="/forums">my_link</a>"

为什么html周围有引号,为什么链接没有显示? (上面的标签字面上显示在页面上)

我可以使用html安全,但这不能打开一些危险吗?如果我想这样做怎么办:

def decorate_user_name
    "#{model.username}!".html_safe
end

并且有人将其用户名设置为

<script> $(document).ready( function(){ alert("hello, just mentioning that I'm mucking about with this website!") } </script>

看到问题?

我有一个验证来阻止首先创建这些字符的用户名,但我不想依赖验证。无论如何,该方法都应显示安全的HTML。

是否有一个选项来创建局部并从装饰器/辅助方法渲染局部?如果你有更复杂的HTML,你想要这样做吗?或者你会使用content_tag

1 个答案:

答案 0 :(得分:0)

当您插入链接时,它会被转换为&#34;到一个字符串。在您的示例中,您不清楚计划如何使用decorate_example,但根据您的担忧,我假设它接收用户输入数据。

我的建议是将字符串放在装饰器外面,只返回链接:

prepended string
<%= decorate_example %>

def decorate_example
  link_to 'my_link', my_link_path
end