3

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

  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%>
});

出现以下错误

"undefined method `each' for nil:NilClass" 即它无法识别 js 文件中的@users。(它在我从中包含 javascript 标记的 user.html.erb 文件中执行。我还要做什么才能让实例对象在 js 文件中被识别?

4

3 回答 3

1

使用<%=and %>(和 ruby​​/rails 文档)

    $(document).ready(function(){
      <% @users.each do |user| %> 
      $('body').append("<p><%= user.first_name %></p>");
      <%end%>
    });
于 2013-08-07T02:07:13.650 回答
0

我不确定这个问题是否太清楚了——这是最终的解决方案。

我最终不得不在标签中包含 Users.html.erb 中的 JS 片段,而不是将 JS 作为一个单独的文件包含在 assets/public 中。

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

于 2013-08-11T22:05:56.177 回答
0

检查@users是否存在,如下所示

  <% @users.each do |user| %> 
    $('body').append("<p><%= user.first_name %></p>");
  <% end if @users%>
于 2013-08-07T09:19:27.067 回答