2014-07-02 38 views
0

我有一個Ruby on Rails應用程序。在users/home被渲染後,它發送一個ajax調用到users#feed。動作feed執行查詢並將用戶列表發送到feed.js.erb,我可以在其中混合使用javascript和erb來呈現頁面上的用戶。然而,爲了使代碼整潔,我想創建一個JavaScript函數,它將數據庫對象(用戶列表)作爲輸入並在頁面上呈現它們。這樣我也可以在其他頁面中使用此功能。什麼是最好的方式來做到這一點?是否有可能將activerecord數據庫對象轉換爲一些我可以輕鬆使用的javascript對象(做類似用戶[0] .name,用戶[2] .address等)的事情?一種方法是轉換爲json或字符串,但我可以很容易地從字符串中獲取信息(例如users [0] .name)。帶有activerecord輸入的javascript函數

這裏是feed.js.erb部分代碼:

function showUsers() { 
    <% if @users.empty? %> 
    alert("no change"); 
    <% else %> 
    <% @users.each do |user| %> 
     $("#<%= j user.id %>").html("<%= j user.name %>"); 
    <% end %> 
    <% end %> 
} 
showUsers(); 

感謝。

回答

1

你可以調用JSON.parse()來在@ users.to_json

例如:showUsers(JSON.parse(<%= @users.to_json %>))

但你也可以返回信息的JSON,而不是js.erb。所以你可以在客戶端使用這個函數,並將用戶對象傳遞給AJAX回調函數。

+0

謝謝,這就是我一直在尋找。因此,如果我使用JSON.parse()並定義'def function showUsers(u){...}'我可以在函數中用'u [0] .name'訪問第一個用戶的名字嗎? – user2725109

+0

我很困惑......'def function'?我以爲你想在javascript上使用它... –

+0

對不起,錯字。我的意思是我用'function showUsers(u){...}'定義了一個函數,然後調用它''showUsers(JSON.parse(<%= @ users.to_json%>))''。我的問題是在定義javascript函數時訪問不同用戶的正確語法是什麼?它是否像'u [0] .name'來訪問第一個用戶的名字? – user2725109