如何在JavaScript中嵌入Ruby对象?

时间:2013-08-07 02:03:30

标签: javascript jquery ruby-on-rails erb

我试图将Ruby嵌入JS.erb文件中,我希望能够访问@user对象及其所有关系。

  1. 我不想转换为JSON对象。我想要ERB 在服务器端预编译。
  2. 我不想在视图中但在JS文件中进行迭代。应该怎样 我正在构建我的controller / view / js.erb文件来实现这一点 工作?
  3. Controller - 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 asset - users.js.erb

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

    出现以下错误

    “未定义的方法`每个'为nil:NilClass” 即它不识别js文件中的@users。 (它在user.html.erb文件中,我从中包含javascript标签。我还做了什么才能在js文件中识别实例对象?

3 个答案:

答案 0 :(得分:1)

使用<%=%>(以及ruby / rails doc)

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

答案 1 :(得分:0)

检查@users是否存在

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

答案 2 :(得分:0)

我不确定这个问题是否过于清晰 - 这是最终决议。

我最终必须在Users.html.erb中包含JS内部的JS,而不是将JS作为assets / public中的单独文件包含在内。

@ users变量只能在views文件夹中的HTML文件中直接访问,而不能直接从assets目录访问。