Ruby on Rails: “找不到文件'jquery-ui'”。

17

我刚刚完成了一次全新的安装,并成功地访问了localhost:3000上的默认Rails页面,但是当我安装了activeadmin gem后,在访问/admin/时遇到了问题,我在/admin/login上收到了以下错误信息(我被重定向了,但这是我在页面上看到的内容):

我该怎么办?我已经执行了bundle update,但还没有解决问题。

下面是部分错误信息:

  

Sprockets :: FileNotFound in Active_admin / devise / sessions#new

     

在 /usr/local/rvm/gems/ruby-1.9.3-p392/gems/activeadmin- > 0.6.0/app/views/layouts/active_admin_logged_out.html.erb 中显示,第12行引发了问题:

     

找不到文件“jquery-ui”(位于/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activeadmin -> 0.6.0/app/assets/javascripts/active_admin/base.js:2中)

这是我的gem文件:

source 'https://rubygems.org'

gem 'rails', '3.2.12'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'activeadmin'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

2
展示你的 application.js 文件。 - uday
1
@uDaY:active_admin使用自己的清单文件-manifest,这里应用程序.js文件不重要。 - PinnyM
4个回答

30
这是一个已知问题,由于jquery-rails依赖项放弃了对jQuery-UI的支持。目前的解决方法似乎是强制加载2.3.0版本的jquery-rails宝石:
gem 'jquery-rails', '~> 2.3.0'

由此引起的相关问题是:在Rails中调试jQueryUI版本


@markhorrocks:那可能不是相同的原因-请随时就您正在经历的问题提出问题。 - PinnyM
如果你遇到了和我一样的问题,而且这个方法没有起作用:请确保你没有安装jrails gem,因为它会与jquery-rails产生冲突,但是不会给你任何有用的错误提示。我正在升级到Rails 3。 - yekta

10
如果您正在使用jquery-ui-rails的更新版本,比如我的情况下jquery-ui-rails-5.0.0
我发现在 jquery-ui-rails-5.0.0 资源文件夹中,将以下行写入application.css:
*= require jquery-ui

获取所有与您的CSS相关的UI元素,只需调用:

*= require jquery-ui/all

如果您将以下内容写入application.js文件中:

//= require jquery-ui

它获取了大部分jQuery js文件,除了某些特定的日期选择器之外,在application.js中没有#all方法,通常这些足够使用,但如果不行,则可以将其余部分直接添加到application.js中,例如:

//=require jquery-ui/datepicker-ru

总之,要同时使用CSS和JS来使用所有UI。

*= require jquery-ui
//= require jquery-ui

我的问题已解决,因为我将jquery-ui-rails升级到了5.0.0版本。谢谢。 - Omer Aslam
1
这对我起作用了。请注意此答案中的'短横线'(即应将"jquery.ui"改为"jquery-ui",如此答案所示)。 - Stephen Henderson

4
我建议您更新您的application.js,将//= require jquery_ui 更改为 //= require jquery.ui.all,这是首选解决方案(而不是使用过时的gem版本)。

正如 OP 所述,这是由于 active_admin 中的清单而发生在 /admin 命名空间内。修改 application.js 是无济于事的 - 你需要复制 active_admin 资产树并在那里进行修改。这相当具有侵入性,并且对于更新来说非常头疼。 - PinnyM

2
添加jquery-ui-rails gem也会为您提供jquery.ui支持。
gem 'jquery-ui-rails'

在您的application.js和application.css文件中,您可以添加所有模块。

jquery.ui.all

或者只选择您需要的部分,例如:

jquery.ui.slider

正确 - 有新的语法来包含jquery ui。使用//= require jquery.ui.all来包含所有模块,或者你可以只指定核心部分,如//= require jquery.ui.core更多信息请参见jquery-ui-rails gem页面 - Danny
1
我认为Roger在Rails 4.1上的评论现在已经过时了(截至2014年8月)。 - Stephen Henderson
是的!新的语法现在是//= require jquery-ui - XML Slayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接