1

我正在使用 Rails 代码将一些 html 和 JS 代码填充到 mysql DB 中。然后从数据库中获取代码并在可配置页面上呈现。在 HAML 文件中,当我在 JS 警报中使用 ruby​​ 代码时,它可以正常工作:

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

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

请帮忙

4

3 回答 3

1

如果可以更改语法(类似alert("<%= user.id %>")),您可以使用 ERB 或其他类似的模板引擎。

这是使用 ERB 的方法。

require 'erb'
user_id = 23
str = 'alert("<%= user_id %>")' # get these from the database
ERB.new(str).result(binding)

请注意,这是危险的,因为这意味着用户实际上可以从 ERB 中运行代码。

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

以下是一些选项:

于 2012-06-20T09:05:32.937 回答
0

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

http://railscasts.com/episodes/324-passing-data-to-javascript?view=comments

于 2012-06-20T08:23:28.123 回答
0

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

=form_for :user do |f|
  =f.hidden_field :id  

然后在javascript中

$('document').ready ->
  alert $('#user_id').val()
于 2012-06-20T08:54:00.950 回答