标签: rails-ujs

Rails UJS 无法与 Rails 7 一起启动

我将Rails应用程序升级到Rails 7。我知道Turbolinks和Rails UJS实际上被Rails 7中的Stimulus和Turbo的Hotwire组合所取代,但我想知道我是否仍然可以使用UJS,如果可以,为什么不可以在职的?

我的方法不起作用,如下所示:

  submit(event) {
    this.errorTarget.classList.add("hidden")
    Rails.fire(this.formTarget, "submit")
    console.log('hi')
  }

Run Code Online (Sandbox Code Playgroud)

console.log 有效。当我单击某个元素时,它过去会随此代码而更改,但现在它不再更改。Rails.fire当我检查网站时,根本不再触发,并且日志或网络部分没有错误。

我觉得我在这里错过了一些重要的东西,但我不知道是什么。

javascript ruby-on-rails rails-ujs ruby-on-rails-7

15
推荐指数
1
解决办法
1万
查看次数

在JS模块中使用Rails-UJS(带有webpacker的Rails 6)

我刚刚切换到Rails 6(6.0.0.rc1),它默认将Webpacker gem用于Javascript资产以及Rails-UJS。我想在某些模块中使用Rails UJS,以便通过以下功能提交表单:

const form = document.querySelector("form")
Rails.fire(form, "submit")
Run Code Online (Sandbox Code Playgroud)

在安装了Webpacker的以前的Rails版本中,该Rails引用似乎在我的模块中“全局”可用,但是现在我在调用Rails.fire… 时得到此引用

ReferenceError: Rails is not defined
Run Code Online (Sandbox Code Playgroud)

我怎样才能让Rails@rails/ujs提供给特定的或我所有的模块?

在我的设置下面...

app / javascript / controllers / form_controller.js

import { Controller } from "stimulus"

export default class extends Controller {
  // ...
  submit() {
    const form = this.element
    Rails.fire(form, "submit")
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

app / javascript / controllers.js

// Load all the controllers within this directory and all subdirectories. 
// Controller files …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails webpack webpacker rails-ujs

14
推荐指数
3
解决办法
1793
查看次数

将 Rails 从 Asset Pipeline 迁移到 Webpacker:未捕获的 ReferenceError:$ 未在 rails-ujs.js 中定义

我正在从使用资产管道迁移到 Rails 5.2 中的 webpacker。我的 AJAX 响应都导致Uncaught ReferenceError: $ is not defined浏览器控制台中的 rails-ujs.js 错误。

我已经设置了我的 webpacker 环境以包含 jquery。

const { environment } = require('@rails/webpacker');
const webpack = require('webpack');

environment.plugins.append("Provide", new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  Popper: ['popper.js', 'default']
}));

module.exports = environment;
Run Code Online (Sandbox Code Playgroud)

我在我的 ../packs/application.js 中导入了 rails-ujs 和 turbolinks

import Rails from 'rails-ujs'
import 'activestorage'
import 'bootstrap'
...
import Turbolinks from "turbolinks"

Rails.start();
Turbolinks.start();

// Import application specific stuff
import 'application/javascripts'
Run Code Online (Sandbox Code Playgroud)

然后我尝试在请求完成时添加一个类。类似于 Rails 指南中显示的内容 https://guides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns

我的 show.js.erb 文件看起来像这样

$("#result").addClass("active") …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-5 webpacker rails-ujs

5
推荐指数
1
解决办法
2698
查看次数

Rails 6:使用 GET 而不是 DELETE 链接到 destroy_user_session_path

我刚刚开始一个简单的 Rails 6.0.3.1 项目。

我正在设置 Devise 操作,但注销链接似乎不起作用。尽管我指定了方法,但它正在执行GET请求而不是:DELETE

- if user_signed_in?
  = link_to 'Logout',
    destroy_user_session_path,
    class: 'button is-light',
    method: :delete

Run Code Online (Sandbox Code Playgroud)

单击链接会产生:

显示 GET 请求的 Rails 错误消息

控制台中没有错误:

单击时没有控制台错误

我的app/javascript/packs/application.js看起来像这样:

- if user_signed_in?
  = link_to 'Logout',
    destroy_user_session_path,
    class: 'button is-light',
    method: :delete

Run Code Online (Sandbox Code Playgroud)

所以 Rails ujs 应该拦截链接点击并执行 a DELETE,但事实并非如此。

我的config/webpack/environment.js看起来像这样:

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
Run Code Online (Sandbox Code Playgroud)

我尝试在其他 SO 线程上寻找解决方案,但没有找到有效的方法。有些人建议使用按钮而不是链接,但我想要链接而不是按钮。

我通过yarn安装Bulma CSS框架后出现了这个问题:

const { environment } = require('@rails/webpacker')
const { VueLoaderPlugin } = require('vue-loader')
const vue = require('./loaders/vue')

environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
environment.loaders.prepend('vue', vue)
module.exports …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails webpacker rails-ujs

5
推荐指数
1
解决办法
833
查看次数

无法找到类型为'application/javascript'的文件'rails-ujs'(在页面加载时)

使用devise for auth并尝试为论坛添加Thredded gem创建了一个Rails 5应用程序.

预期的行为

应用程序应加载到http:// localhost:3000.

实际行为

服务器启动后,应用程序所在的Chrome浏览器中会显示以下消息.

无法找到类型为'application/javascript'的文件'rails-ujs'

System configuration

    Ruby 2.4.0p0 (2016-12-24 revision 57164)
    Rails 5.0.4

GemFile
    gem 'pg', '~> 0.18'
    gem 'puma', '~> 3.0'
    gem 'sass-rails', '~> 5.0'
    gem 'uglifier', '>= 1.3.0'
    gem 'coffee-rails', '~> 4.2'
    gem 'thredded', '~> 0.13.7'
    gem 'omniauth-facebook'
    gem 'geocoder'
    gem 'rails_admin', '~> 1.1.1'
    gem 'devise'
    gem 'jquery-rails'
    gem 'bcrypt', '~> 3.1.11'
    gem 'turbolinks', '~> 5'
    gem 'jbuilder', '~> 2.5'
Run Code Online (Sandbox Code Playgroud)

谢谢.

rubygems ruby-on-rails rails-ujs

2
推荐指数
1
解决办法
2532
查看次数

找不到模块“@rails/ujs” - Rails 6 Webpack 应用程序

我在 Rails 6 应用程序中遇到以下错误,并且所有 javascript 均无法正常工作:

\n\n
ERROR in ./app/javascript/packs/application.js\nModule not found: Error: Can\'t resolve \'@rails/activestorage\' in \'/Users/jrsahuquillo/Dropbox/myappname/app/javascript/packs\'\n @ ./app/javascript/packs/application.js 9:0-31\n\nERROR in ./app/javascript/packs/application.js\nModule not found: Error: Can\'t resolve \'@rails/ujs\' in \'/Users/jrsahuquillo/Dropbox/myappname/app/javascript/packs\'\n @ ./app/javascript/packs/application.js 5:0-21\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的package.json是:

\n\n
{\n  "name": "myappname",\n  "private": true,\n  "dependencies": {\n    "@rails/actioncable": "^6.0.0-alpha",\n    "@rails/activestorage": "^6.0.2",\n    "@rails/ujs": "^6.0.2",\n    "@rails/webpacker": "4.2.0",\n    "bootstrap": "^4.4.1",\n    "jquery": "^3.4.1",\n    "jquery-ui": "^1.12.1",\n    "jquery-ui-dist": "^1.12.1",\n    "popper.js": "^1.16.0",\n    "serialize-javascript": "2.1.2",\n    "turbolinks": "^5.2.0"\n  },\n  "version": "0.1.0",\n  "devDependencies": {\n    "webpack-dev-server": "^3.8.0"\n  },\n  "optionalDependencies": {\n    "fsevents": "2.0.0"\n …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails webpacker rails-ujs rails-activestorage ruby-on-rails-6

2
推荐指数
1
解决办法
8606
查看次数

Rails 6:未定义 Rails

我正在尝试使用 UJS 触发表单提交:

  <%= f.file_field :profile_image,
                   direct_upload: true,
                   accept: 'image/png,image/gif,image/jpeg',
                   onchange: "Rails.fire(this.form, 'submit')"
  %>
Run Code Online (Sandbox Code Playgroud)

但是,我在 JS 控制台中看到以下错误:

ReferenceError: Can't find variable: Rails
Run Code Online (Sandbox Code Playgroud)

应用布局文件指向应用JS包:

<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
Run Code Online (Sandbox Code Playgroud)

我可以看到它通过控制台日志的输出加载:

console.log('Application pack loaded')
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("@rails/activestorage").start()
Run Code Online (Sandbox Code Playgroud)

据我了解,rails ujs 应该公开Rails对象。那正确吗?

为什么该Rails变量对浏览器不可用?我需要做什么来确保它是?

ruby-on-rails rails-ujs ruby-on-rails-6

1
推荐指数
1
解决办法
1235
查看次数