如何在Haml中将Ruby代码作为变量进行求值

cu6pst1q  于 2023-06-29  发布在  Ruby
关注(0)|答案(1)|浏览(91)

我在haml玩ruby evaluation。如果我向haml模板传递一个变量,它就不起作用了。只有当ruby代码已经在模板中时才有效(不是作为变量传递),我分享我的源代码以更好地解释

require 'sinatra'
require 'haml'

get '/' do
  @user_input = params[:foo_user_input]
  puts @user_input
  haml :foo
end

__END__

@@ foo

%p= "hello"
<br>
%p= 7*7
<br>
%p= #{@user_input}
<br>
%p This is #{7*7} cake!
<br>
%p This is #{@user_input} cake!
<br>
%p= @user_input
<br>

如果我将7*7传递给GET请求,正如你所看到的,我得到的是7*7,而不是49。只有当我已经把7*7放在haml模板本身时,它才被评估。

hello
49
This is 49 cake!
This is 7*7 cake!
7*7
inkz8wg9

inkz8wg91#

当你想计算存储在字符串变量中的Ruby代码时,你可以像这样使用eval

%p This is #{eval(@user_input)} cake!

警告:但不要将来自不可信源的字符串传递给eval。攻击者可以向您的方法传递代码,将我们的密码上传到他们的服务器或删除您的硬盘。

相关问题