2013-08-07 68 views
2

我想在Ruby中嵌入JS.erb文件,我想要能夠訪問@user對象及其所有關係。如何在JavaScript中嵌入Ruby對象?

  1. 我不想轉換爲JSON對象。我希望ERB在服務器端預編譯 。
  2. 我不想在視圖中迭代,但在JS文件中。 我應該如何構建我的控制器/視圖/ js.erb文件來使這個 工作?

控制器 - user_controller

class UsersController < ApplicationController 

     def index 
     end 

end 

型號 - user.rb

class User < ActiveRecord::Base 
    attr_accessible :email, :first_name, :last_name 
    has_many :qualification_rs 
end 

視圖 - Users.html.erb是空白的(我想從JS純粹讓我的代碼)

<html> 
<body> 
</body> 
</html> 

Javascript資產 - users.js.erb

$(document).ready(function(){ 
<% @users.each do |user| %> 
$('body').append(<% = user.first_name%>); 
<%end%> 
}); 

以下錯誤出現

「未定義的方法`每個」爲無:NilClass」 即,它不識別在JS文件@users。 (它在包含javascript標籤的user.html.erb文件中執行,我還有什麼辦法讓實例對象在js文件中被識別出來?

回答

1

使用<%=%>(和ruby /導軌DOC)

$(document).ready(function(){ 
     <% @users.each do |user| %> 
     $('body').append("<p><%= user.first_name %></p>"); 
     <%end%> 
    }); 
+0

我得到以下錯誤信息,如果我這樣做 - 我的錯誤是 – Venomoustoad

+0

「未定義的方法'每個'爲零:NilClass」 即不是我沒有在HTML上運行erb文件,但在js文件中的資產夾。它不能識別js文件中的@users。 (它在包含javascript標籤的user.html.erb文件中執行,我還需要做什麼才能使實例對象在js文件中被識別? – Venomoustoad

+0

您需要在控制器中實例化它,比如'@ user = User.find(1)'例如 – Antoine

0

支票@users存在或不喜歡以下

<% @users.each do |user| %> 
    $('body').append("<p><%= user.first_name %></p>"); 
    <% end if @users%> 
0

我不知道這個問題是否太clear-這裏是最後的解決。

我終於必須在Users.html.erb中包含JS內部的JS代碼,而不是將JS作爲單獨的文件包含在assets/public中。

@ users變量只能在視圖文件夾中的HTML文件中直接訪問,而不能直接從資產目錄訪問。