带有Rails 5的远程表单中的间歇性ActionController :: UnknownFormat错误

时间:2018-11-01 18:27:14

标签: ruby-on-rails actioncontroller

我有一个form_with,可以远程提交,并且几乎对每个人都适用。但是,用户偶尔会收到此错误:

ActionController::UnknownFormat: TestimonialsController#create is missing a template for this request format and variant.

request.formats: ["text/html"]
request.variant: []

视图:

<%= form_with(model: [@event, @testimonial]) do |form| %>
...
<% end %>

操作:

def create
  @testimonial = @event.testimonials.find_or_initialize_by(user: Current.user)
  @testimonial.assign_attributes testimonial_params.merge({status: :pending})
  @testimonial.save
end

响应:

它在名为create.js.erb的文件中

问题:我到处都看过,但我不知道为什么某些用户要求HTML而不是JS,而这正是其他用户所需要的。我想念什么?我真的不想支持HTML响应。

1 个答案:

答案 0 :(得分:0)

您的服务器可能正在接收不同格式的请求,并尝试相应地为它们提供服务:

  • GET www.my_server.com/resource.html
  • GET www.my_server.com/resource.json
  • 或者格式奇怪的GET www.my_server.com/resource.what

这是Rails中所需的行为。查看this question,了解如何更改路线的默认格式,也可以在json中将其全部更改为ApplicationController类型:

class ApplicationController < ActionController::Base
  before_action :set_default_response_format

  protected

  def set_default_response_format
    request.format = :json
  end
end

重要的一行是request.format = :json,它只能用于一个控制器或仅用于其动作之一。

如果您希望代码始终在json中响应,那么您可能需要查看Using Rails for API-only Applications