我正在使用装饰器,但如果我使用帮助器则会出现同样的问题。
我尝试做的只是显示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
?
答案 0 :(得分:0)
当您插入链接时,它会被转换为&#34;到一个字符串。在您的示例中,您不清楚计划如何使用decorate_example
,但根据您的担忧,我假设它接收用户输入数据。
我的建议是将字符串放在装饰器外面,只返回链接:
prepended string
<%= decorate_example %>
def decorate_example
link_to 'my_link', my_link_path
end