【问题标题】:Ruby on Rails asset pipeline doesn't work properlyRuby on Rails 资产管道无法正常工作
【发布时间】:2017-10-29 02:43:27
【问题描述】:

我刚才一直在做一个 ruby​​ on rails 项目。我创建了一个名为“animals”的控制器和一个用于索引操作的视图 (index.html.erb)。我不想包含“应用程序”javascript 文件。

所以我创建了animals.js

文件的内容是

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= animals.coffee

我还在asset.rb中添加了animals.js和animals.css

Rails.application.config.assets.precompile += %w( animals.js )
Rails.application.config.assets.precompile += %w( animals.css )

我的 index.html.erb 包含以下几行

<%= stylesheet_link_tag 'animals', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'animals', 'data-turbolinks-track' => true %>

当我检查服务器生成的源 html 代码时,我发现页面中没有包含 jquery scipts。它只是 animal.js 文件。

<head>
   <meta name="viewport" content="width=device-width, initial-  scale=1.0">
   <title>Rails Omniauth</title>
   <meta name="description" content="Rails Omniauth">
   <link rel="stylesheet" media="all" href="/assets/animals.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b5433a495991b7852b855.css?body=1" data-turbolinks-track="true">
   <script src="/assets/animals.self-1d93d37bf2f830ac42e82eb68e3bb0040ece5d23533a05bf77f7407fd59178d3.js?body=1" data-turbolinks-track="true"></script>

</head>

有什么建议为什么要包含这些脚本?

谢谢。

【问题讨论】:

  • 那么您实际上是在问为什么 jquery 被包括在内,或者为什么只包括您的 animals.js
  • 是的,这是我的主要问题。当我添加
  • 那么您现在的问题是什么?你意识到区别了吗?我建议不要走这条路,只需要 application.js。您还可以创建第二个 application_2.js 在其中添加 jquery 和动物并将其包含在您的视图中

标签: javascript ruby-on-rails coffeescript asset-pipeline assets


【解决方案1】:

我认为您的问题可能是您有两个具有相同名称(但扩展名不同)的文件。由于 Rails 资产助手同等对待 coffescript 和 js 文件,因此这是模棱两可的:

<%= javascript_include_tag 'animals', 'data-turbolinks-track' => true %>

它应该加载哪个文件?我猜它需要按字母顺序排列的第一个,即animals.coffee

要解决此问题,请将 sprockets 清单移至 animals.coffee 并删除 animals.js 文件。

# app/assets/animals.coffee
#= require jquery
#= require jquery_ujs
#= require turbolinks
#= require bootstrap-sprockets
#= require_self
alert 'Hello World'

【讨论】:

  • 我试过那个。生成的页面中仅包含animals.js,而我仅包含 (function() {$(function() {return alert("sdfsdfsd");});}).call(this);因为 jquery 没有包含在文件中,编译器会抱怨 '$' 变量:(
  • 已编辑。我认为这是因为你有两个同名的文件。
  • 我改变了你提到的animals.coffe的内容。但是现在它没有编译。
  • 对,对不起。对于 cmets,Coffescript 使用 # 而不是 //。已编辑
  • 这也证明了我的理论,rails 链接到animals.coffee
【解决方案2】:

您可以删除 animals.coffee 文件,并且可以在 application.js 文件中要求 animal.js 以在您的项目中使用您的 js 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多