一尘不染

控制器无法检测到Ajax请求

ajax

我正在使用simple_form gem并生成表单,我正在指定remote:true选项,如下所示:

<%= simple_form_for @webinar, validate: true, remote:true do |f| %>

因此,表单的输出html是以下片段:

<form accept-charset="UTF-8" action="/webinars" class="simple_form new_webinar" data-remote="true" data-validate="true" enctype="multipart/form-data" id="new_webinar" method="post" novalidate="novalidate"> ... </form>

正如我检查的那样,当使用 remote:true
选项时,使用标准的form_for帮助器将
data-remote =’true’添加 到表单中。从生成的html中可以看到,当我使用simple_form gem时,也有这样的属性。 __

因此,在我的控制器中,我有:

def create
  @webinar = Webinar.new(params[:webinar])

  respond_to do |format|
    if @webinar.save
      format.html { redirect_to @webinar, notice: 'Webinar was successfully created.' }
      format.js
      format.json { render json: @webinar, status: :created, location: @webinar }
    else
      format.html { render action: "new" }
      format.json { render json: @webinar.errors, status: :unprocessable_entity }
    end
  end
end

但是,始终使用 format.html 。我做错了什么?

编辑:

我已经使用logger.debug request.format来检查实际要求的格式是什么,在日志文件中它是:

文字/ HTML

因此,问题必须在simple_form生成的形式中-当我们具有“ data-remote = true”时,那里可能出什么问题了?


阅读 204

收藏
2020-07-26

共1个答案

一尘不染

我不敢相信我已经花了太多时间试图理解为什么 simple_form 无法按预期工作。

最后,看来我已按照正确的方式完成了所有操作,而造成此问题的原因是:

AJAX不能用于文件上传。

为了解决我的问题,我只需要将以下gem添加到我的 Gemfile中, 然后运行 bundle install 命令:

gem 'remotipart', '~> 1.0'

然后在我的 application.js 文件中添加以下行:

// =需要jquery.remotipart

有关以下内容的更多信息:

  1. 远程宝石
  2. 如何使用jQuery上传多个文件
2020-07-26