我有一个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响应。
答案 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