【问题标题】:How to use javascript variables in ruby如何在 ruby​​ 中使用 javascript 变量
【发布时间】:2013-03-03 13:59:03
【问题描述】:

我是 Rails 新手,我想在 ruby​​ 嵌入式代码中使用 javascript 变量来在数据库中进行查询,

这是我的代码

function modify(){
    var select = document.getElementById("special_id").value;
    var select2 = document.getElementById("target_area_id");
    select2.options.length = 1;

    <% @values = TargetArea.where(:special_id => select) %>

    select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");
}

我想比较从我的选择中获得的值和一个字段的 id。

您能告诉我如何在 Ruby 中做到这一点吗?谢谢

【问题讨论】:

  • 您的 javascript 变量和您的 ruby​​ 代码不在同一个世界。您需要创建一个门户以允许一个与另一个通信。
  • 代码示例中的 Ruby 代码仅在生成要发送到浏览器的 Javascript 时执行。你不能这样直接从 Javascript 调用 Ruby 代码,你必须使用 AJAX:guides.rubyonrails.org/ajax_on_rails.html

标签: javascript ruby-on-rails ruby variables


【解决方案1】:

一种可能是我所知道的最简单的方法,也是处理此问题的常规方法,是执行 Ajax 请求。 JavaScript 是客户端,而 Ruby 通常是服务器端。

您可以在您的路由文件中创建一个路由,然后在相应的控制器中创建响应 JavaScript 而不是 HTML 的操作。在该 JavaScript 文件中,您可以更改或修改页面上的内容并访问您更改的变量、重新渲染页面的某些部分,等等。我将在这里使用 jQuery,因为它更简洁。

在您的路线文件中:

post 'some_controller/make_a_change', to: 'some_controller#make_a_change'

然后,在你上面定义的函数中:

$.ajax({
   url:'/some_controller/make_a_change', //Defined in your routes file
   data:(
     'special_id=' + $('#special_id').val() + '&' +
     'target_area_id=' + $('#target_area_id').val()
   )
})

在 SomeController.rb 中,您可以通过 params 访问您的 JavaScript 值:

def make_a_change
   some_special_id = params[:special_id]
   taid = params[:target_area_id]
   @values = TargetArea.where(:special_id => some_special_id)

   respond_to do |format|
      format.js { render 'make_a_change' } #make_a_change.js.erb
   end
end

然后,我认为您可以在 make_a_change.js.erb 中完成其余的工作,每次您调用其他函数并且您的 Ajax 请求成功时都会运行它。

var select2 = document.getElementById("target_area_id");
select2.options.length = 1;
select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");

根据您的需要进行调整。希望这会有所帮助!


更新:

我才意识到这一行:

select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");

可能行不通。如果它是一个 HTML 选择框或类似的东西,你可以把它放在它自己的视图中,然后在 make_a_change.js.erb 中的适当位置重新渲染它。

像这样:

     $('#some_div').html('<%= j render 'select2_list', values:@values %>')

大多数情况下,我的回答背后的主题是:如果您想通过 JavaScript 函数与您的 Ruby 代码或服务器数据进行交互,该函数是在您单击按钮或选中框或类似内容时调用的某个函数,您将不得不向您的服务器发送一个 Ajax 请求并在您的控制器中处理该请求。这将使您更接近 Rails,并远离尝试使用 = 符号链接两个不同的语言变量。

【讨论】:

  • 感谢您的回答,我不知道该怎么办。我会试试你说的,希望它有效。非常感谢
  • 我的荣幸!欢迎使用 Rails =)
【解决方案2】:

由于 Ruby 是一种基于服务器的语言,例如 php 或 asp/asp.net,因此在页面中使用来自服务器的代码非常容易,就像打印它一样,因此如果您想使用服务器端值更改 javascript 变量很容易。然而,做相反的事情是另一回事。我会使用代理调用(最有可能是 jQuery)将这些值发送到服务器。您要求的解决方案要求使用像 jQuery 这样的 javascript 框架,而不是我知道的 rails。

尝试使用 jQuery ajax 代理并根据服务器的响应在客户端刷新数据,这样就可以了。

检查http://www.jquery.com,使用 Rails 创建服务,以 JSON 响应您的查询。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2014-07-15
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2020-08-01
    • 2015-06-29
    相关资源
    最近更新 更多