繁体   English   中英

如何在Ruby中使用JavaScript变量

[英]How to use javascript variables in ruby

我是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中执行此操作吗? 谢谢

我可能最了解的一种方法,也是处理该问题的常规方法,是执行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,而不再尝试将两个不同的语言变量链接为=符号。

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

尝试使用jQuery ajax代理并根据服务器的响应在客户端中刷新数据,这将达到目的。

检查http://www.jquery.com ,使用rails创建将使用JSon响应您的查询的服务。

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM