簡體   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