【问题标题】:how do I embed a Ruby object in JavaScript?如何在 JavaScript 中嵌入 Ruby 对象?
【发布时间】:2013-08-07 02:03:30
【问题描述】:

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

  1. 我不想转换为 JSON 对象。我希望ERB 在服务器端预编译。
  2. 我不想在视图中迭代,而是在 JS 文件中迭代。应该怎样 我正在构建我的控制器/视图/js.erb文件来做这个 工作?

控制器 - 用户控制器

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

出现如下错误

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

【问题讨论】:

    标签: javascript jquery ruby-on-rails erb


    【解决方案1】:

    使用 &lt;%=%&gt;(以及 ruby​​/rails 文档)

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

    【讨论】:

    • "undefined method `each' for nil:NilClass" 即不是我没有在 html 上运行 erb 文件,而是在 assets 文件夹中的 js 文件上运行。它无法识别 js 文件中的 @users。 (它在我从中包含 javascript 标记的 user.html.erb 文件中执行。我还要做什么才能在 js 文件中识别实例对象?
    • 你需要在你的控制器中实例化它,例如@user = User.find(1)
    【解决方案2】:

    检查@users 是否存在

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        • 2010-09-19
        • 2013-07-20
        • 2020-09-17
        • 1970-01-01
        • 2020-02-01
        • 1970-01-01
        相关资源
        最近更新 更多