Javascript 如何使从DB中提取的Ruby代码在JS中工作?

Javascript 如何使从DB中提取的Ruby代码在JS中工作?,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我正在使用rails代码将一些html和JS代码填充到mysql数据库中。然后从数据库中提取代码,并在可配置页面上呈现。在HAML文件中,当我在JS警报中使用ruby代码时,效果很好: 警报(“#{user.id}”) 显示id是因为我将用户对象传递到此页面。 现在,当我在DB中保存这一行警报(“#{user.id}”)并呈现JS代码时,它将#{user.id}作为字符串发出警报。我如何让它意识到,来自DB的字符串不仅仅是一个字符串,它是一些ruby代码,当我在那里获取用户对象时,需要在页面上对

我正在使用rails代码将一些html和JS代码填充到mysql数据库中。然后从数据库中提取代码,并在可配置页面上呈现。在HAML文件中,当我在JS警报中使用ruby代码时,效果很好:

警报(“#{user.id}”)

显示id是因为我将用户对象传递到此页面。 现在,当我在DB中保存这一行警报(“#{user.id}”)并呈现JS代码时,它将#{user.id}作为字符串发出警报。我如何让它意识到,来自DB的字符串不仅仅是一个字符串,它是一些ruby代码,当我在那里获取用户对象时,需要在页面上对其进行解释。因此,它应该显示实际的id,如5或6,而不是显示一个简单的字符串“#{user.id}”


Plz帮助

要将数据从Rails传递到JS,有几种方法可以做,请参见此处的视频:


要将数据从Rails传递到JS,有几种方法,请参见此处的视频:


就我个人而言,我将数据存储在视图中的一个隐藏字段中,然后使用jQuery处理它

=form_for :user do |f|
  =f.hidden_field :id  
然后在javascript中

$('document').ready ->
  alert $('#user_id').val()

就我个人而言,我将数据存储在视图中的一个隐藏字段中,然后使用jQuery处理它

=form_for :user do |f|
  =f.hidden_field :id  
然后在javascript中

$('document').ready ->
  alert $('#user_id').val()

如果可以更改语法(如
alert(“”
),则可以使用ERB或其他类似的模板引擎

以下是如何与雇员再培训局合作

require 'erb'
user_id = 23
str = 'alert("<%= user_id %>")' # get these from the database
ERB.new(str).result(binding)
需要“erb”
用户id=23
str='alert(“”)#从数据库中获取这些
ERB.new(str.result)(绑定)
请注意,这很危险,因为这意味着用户实际上可以从ERB内部运行代码。

为了解决这个问题,我建议使用另一种模板语言

以下是一些选项:


如果可以更改语法(如
警报(“”
),则可以使用ERB或其他类似的模板引擎

以下是如何与雇员再培训局合作

require 'erb'
user_id = 23
str = 'alert("<%= user_id %>")' # get these from the database
ERB.new(str).result(binding)
需要“erb”
用户id=23
str='alert(“”)#从数据库中获取这些
ERB.new(str.result)(绑定)
请注意,这很危险,因为这意味着用户实际上可以从ERB内部运行代码。

为了解决这个问题,我建议使用另一种模板语言

以下是一些选项:


谢谢你的回答。在我的例子中,我在想显示ruby+JS代码#{raw decode_entities configurable_page.JS_for_body}的页面上使用了这一行,保存在db中的所有脚本都在页面上呈现。因此,我必须在db字段中进行所有更改,而不是在haml页面上。在haml页面上,我只使用一行代码来显示所有可用的JS代码。因此,在将JS呈现到页面上之前,我猜您会通过我上面列出的模板引擎之一传递它?谢谢您的回答。在我的例子中,我在想显示ruby+JS代码#{raw decode_entities configurable_page.JS_for_body}的页面上使用了这一行,保存在db中的所有脚本都在页面上呈现。因此,我必须在db字段中进行所有更改,而不是在haml页面上。在haml页面上,我只使用一行代码来显示所有可用的JS代码。因此,在将JS呈现到页面上之前,我猜您会通过我上面列出的模板引擎之一传递它吗?