2014-07-02 32 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