[英]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.