如何在ruby中使用javascript变量

我是rails的新手,我想用一个javascript变量到ruby嵌入代码中来在数据库中进行查询,

这是我的代码

function modify(){ var select = document.getElementById("special_id").value; var select2 = document.getElementById("target_area_id"); select2.options.length = 1;  select) %> select2.options[select2.options.length] = new Option(,"1"); } 

我想将我的select获得的值与字段的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 %>') 

大多数情况下,我的答案背后的主题是这样的:如果你想与你的Ruby代码或来自JavaScript函数的服务器数据进行交互,这是一个函数,当你点击一个按钮或检查一个框或某些东西时调用它们,你将有向服务器发送Ajax请求并在控制器中处理请求。 这将使您更接近Rails,并进一步尝试使用=符号链接两个不同的语言变量。

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

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

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

我希望这有帮助。