我有一个视图,有很多相同的项目,只更改项目名称,以保持DRY我已经重构为部分。我的问题是,如果我将type_oil
,一个字符串变量发送给partial,那么eval eval("#{type_oil}_path")
是否会以任何方式向公众公开?这可能是一个安全问题吗?
视图/ CONTROLLER_NAME / oils.html.haml
#oils-content
-# oils_list is a list of strings
- oils_list.each do |oil|
= render "controller_name/oils_item" , type_oil: oil
视图/ CONTROLLER_NAME / _oils_item.html.haml
.item
%h2= t("oils.#{type_oil}.front_header")
%p= t("oils.#{type_oil}.front_body")
= link_to t("oils.#{type_oil}.link"), eval("#{type_oil}_path")
答案 0 :(得分:0)
它不会以任何方式暴露给公众。我认为你的困惑来自于你认为你视图中的Ruby是像HTML一样的前端语言(或者在这种情况下,HAML)。它不是。视图中的所有Ruby都可以动态创建HTTP响应的内容,因此在从服务器发送响应之前执行。