2014-02-24 39 views
0

我正在使用Ruby on Rails 4,並試圖編寫需要填充服務器端數據的JavaScript。例如,我可能有一個名爲StudentsController的控件,我想從特定的類中返回所有特定的學生。所以在我的控制,我可能做的事:在Ruby on Rails 4.x中正確嵌入JavaScript變量

def index 
    @students = Student.all 
end 

然後我有一個/app/assets/javascripts/腳本調用foo.js,並在那裏我想通過自己的class_id分裂學生了。

foo.js

$(function() { 
    var class_a = <%= @students.select { |s| s.class_id = 'a' }.to_json %> 
    var class_b = <%= @students.select { |s| s.class_id = 'b' }.to_json %> 
}) 

問題

class_a爲空,當我檢查對事物的瀏覽器端。我假設foo.js未鏈接到StudentsController,並且沒有看到@students。以這種方式連接JavaScript的正確方法是什麼,所以我可以通過服務器端對象訪問JavaScript變量?

+0

嘗試使用坤寶石 – apneadiving

回答

2

這裏的一個問題很簡單,你的文件應該叫做foo.js.erb來編譯ruby。

另外,我覺得要做到這一點:

var class_a = <%= @students.select { |s| s.class_id == 'a' }.to_json %> 

(注意雙等號)

你甚至可能會更好找到你的控制器中的特定學生,並通過單獨互傳 - 這將是一個更好的問題分離,並會保持這種邏輯擺脫你的觀點。

+0

然後,我必須添加'foo.js'到我的HTML? – randombits

+0

您應該簽出Asset Pipeline上的文檔以瞭解它們如何一起工作:http://guides.rubyonrails.org/asset_pipeline.html – benjaminjosephw