我将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当我检查网站时,根本不再触发,并且日志或网络部分没有错误。
我觉得我在这里错过了一些重要的东西,但我不知道是什么。
我刚刚切换到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) 我正在从使用资产管道迁移到 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) 我刚刚开始一个简单的 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)
单击链接会产生:
控制台中没有错误:
我的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) 使用devise for auth并尝试为论坛添加Thredded gem创建了一个Rails 5应用程序.
应用程序应加载到http:// localhost:3000.
服务器启动后,应用程序所在的Chrome浏览器中会显示以下消息.
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)
谢谢.
我在 Rails 6 应用程序中遇到以下错误,并且所有 javascript 均无法正常工作:
\n\nERROR 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\nRun Code Online (Sandbox Code Playgroud)\n\n我的package.json是:
{\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
我正在尝试使用 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变量对浏览器不可用?我需要做什么来确保它是?