【问题标题】:Rails unknown format on AJAXAJAX上的Rails未知格式
【发布时间】:2016-08-23 14:23:28
【问题描述】:

我正在尝试使用remotipart gem 实现一个非常简单的文件表单。我的大部分文件与教程文件完全相同:

timeline.html.erb:

<%= form_tag new_feed_path(:format => "js"), remote: true, :html => { :multipart => true } do |f| %>
  <%= hidden_field_tag :brief_id, @brief.id %>
  <%= file_field_tag :file %>
  <%= submit_tag "Send", class: "btn btn-success" %>
<% end %>

briefs_controller.rb

 def new_feed
    puts params
    respond_to do |format|
      format.js
    end
 end

new_feed.js.erb

alert('success!');

<% if remotipart_submitted? %>
  alert('submitted via remotipart')
<% else %>
  alert('submitted via native jquery-ujs')
<% end %>

但是每次我提交表单时,我都会在日志中收到以下错误:

Processing by ResourcesController#create as HTML
Completed 406 Not Acceptable in 14ms
ActionController::UnknownFormat - ActionController::UnknownFormat:

我错过了什么吗?我知道 ajax 文件上传在 RoR 上可能很棘手,但 remotipart 似乎是一个可行的解决方案。

编辑我设法通过添加 :format =&gt; "js" 解决了第一个问题,但现在我面临另一个问题:没有发送任何表单数据。事实上,这里是发送的参数:

{"controller"=>"briefs", "action"=>"new_feed"}

【问题讨论】:

  • 您使用了 remote true,但请求仍以 HTML 格式处理,正如您的日志所说
  • 嗯,把news_feed.js.erb的名字改成create.js.erb怎么样?其他建议是将对authorize 的调用放在上面的respond_to 块中。
  • @BenPolinsky , js 文件工作正常,也授权。我很确定它来自 form_for 本身,但不知道如何或为什么
  • 显示你的 rake 路线 | grep new_feed
  • @BrenoPerucchi new_feed POST /new_feed(.:format) Briefs#new_feed

标签: ruby-on-rails ajax remotipart


【解决方案1】:

查看Remotipart's docs 中的示例。

看起来您没有将:html =&gt; { :multipart =&gt; true } 传递给form_for

【讨论】:

    【解决方案2】:

    试试看

    <%= form_tag new_feed_path, html: {multipart: true }, method: :post, remote:true do |f| %>
      <%= hidden_field_tag :brief_id, @brief.id %>
      <%= file_field_tag :file %>
      <%= submit_tag "Send", class: "btn btn-success" %>
    <% end %>
    

    编辑

    试试看

    安装这个 gem pry

    RailsCast Pry

    briefs_controller.rb

    def new_feed
      binding.pry #just to be sure that this action is not called 
      puts params
      respond_to do |format|
        format.js { render 'new_feed') # modify this
      end
    end
    

    【讨论】:

    • 没用。当我用 form_tag new_feed_path(format: :js) 替换它时它起作用了,但有两个主要问题: - 表单不发送文件数据 - 未使用 remotipart(我收到 'submitted via native jquery-ujs' 消息)
    • 如果 Rails 日志中有更多行,请在您的帖子中添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多