2015-09-30 39 views
1

我有一個js.coffee.erb文件,並且在該文件中有一個函數,它獲取'equipment'json對象(在javascript中)並將一些數據粘貼到html 。
json對象保存在名爲eqp的變量中。將CoffeeScript json對象數據保存在Rails變量中

每個設備都有一個category(引用其他表對象)。
在JSON對象,只存在equipment.category_id,因此要獲得類別名稱我寫了這樣一句話:

$("#display_equipment_category_value").html <%= Category.find(eqp.category_id).name %> 

的問題是,因爲它不是一個軌道就不能定義稱爲eqp一個軌道變量目的。

我該如何將js json eqp.category_id保存在一個rails變量中?

set_equipment = (eqp) -> 
    <% cat_id = ????? %>  -  # save the eqp.category_id into cat_id 
    $("#display_equipment_category_value").html <%= Category.find(cat_id).name %> 
+0

沒辦法。 Rails運行在客戶端運行的server和java/coffeescript。 如果您想要將數據從客戶端傳輸到服務器,您可以使用ajax查詢,但它們需要服務器上的新路由和控制器方法。 –

+0

這是CoffeeScript客戶端JavaScript文件還是由'respond_to'塊渲染? – nayiaw

+0

haa ..好吧,我明白了。那麼我應該如何解決顯示類別名稱的問題?我應該帶所有類別並與客戶端的category_id進行比較嗎? – AlonP

回答

0

我不知道這是否是正確的答案,因爲它似乎是無效的,但它工作得很好,所以我會用它:

set_equipment = (eqp) -> 

    // Creating an empty string variable for the result category name 
    cat = ""; 


    // Bringing all categories from DB and save them as a json object 

    <% all_cat = Category.all %> 
    categories = <%= all_cat.to_json %> 


    // Comparing each category to the equipment category_id 

    $.each categories, (i, v) => 
     cat = v.name if (v.id == eqp.category_id) 


    // Display the category name in the html 

    $("#display_equipment_category_value").html cat 
+0

注意:如果代碼位於coffeescript文件中,那麼erb代碼只會被評估一次(在資產編譯期間),可能不是您想要的。在開發環境中,每次更改代碼時都會對其進行重新評估 – house9