【发布时间】:2023-04-05 01:58:01
【问题描述】:
我有一个表格:
=form_for @user, :html => {:class => "form-horizontal"}, remote: true, :authenticity_token => true do |f|
%h2.underline= t('edit-profile-picture')
%p=t('upload_message')
.flexbox.flex-center
.btn.btn-default{:onclick => 'upload()'}= t('choose-file')
= f.file_field :avatar, :style => 'visibility: hidden; position: absolute'
当用户选择文件时由脚本提交。
$("input:file").change(function (){
$('#edit_user_2').submit();
});
一切都很顺利,除了一件事——控制台说:
Processing by UsersController#update as HTML
显然,我在控制器中收到了符合 format.html 的响应:
respond_to do |format|
format.js
format.html {redirect_to user_path}
end
最奇怪的是,它与我在另一个控制器中的另一个 form_for(非常简单)完美配合。
=form_for @suggestion, remote: true do |f|
.col-sm-12
.form-group
%label.control-label{:for => 'name'}= t('your-suggestion')
= f.text_area :content, :placeholder => t("suggestion-example"), :class => "form-control"
.row.container-margin
.col-sm-2.col-sm-offset-10
= f.submit t("send"), :class => "btn btn-default"
正如预期的那样,控制台说:
Processing by SuggestionsController#create as JS
我已经尝试过像这样强制:format => :js:
=form_for @user, :html => {:class => "form-horizontal", 'data-type' => 'js'}, remote: true, :authenticity_token => true, :format => :js do |f|
它给出了一个奇怪的结果:
Processing by UsersController#update as JS
...
Rendered users/update.js.erb (0.0ms)
但它呈现为原始文件!
所以,我的remote: true 似乎由于某种原因不起作用。任何想法为什么?我想到了一件事:用户模型是由 Devise gem 创建和使用的,但我不确定它与我的问题有什么关系:(
更新:
是的,我的 application.js 清单中有 jquery_ujs。这里是:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require jquery-ui
//= require_tree .
UPD2:
我试图摆脱我的 JavaScript upload() 函数并使用经典的 input,但结果相同。
【问题讨论】:
-
您是否已将
jquery-ujs添加到您的 application.js 清单文件中? -
正如我上面所说, :remote => true 与同一应用程序中的另一个控制器完美配合。所以,是的,我的清单中有
jquery-ujs。
标签: jquery ruby-on-rails ajax ruby-on-rails-4 devise