我正在使用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”时,那里可能出什么问题了?
我不敢相信我已经花了太多时间试图理解为什么 simple_form 无法按预期工作。
最后,看来我已按照正确的方式完成了所有操作,而造成此问题的原因是:
AJAX不能用于文件上传。
为了解决我的问题,我只需要将以下gem添加到我的 Gemfile中, 然后运行 bundle install 命令:
gem 'remotipart', '~> 1.0'
然后在我的 application.js 文件中添加以下行:
// =需要jquery.remotipart
有关以下内容的更多信息: