【问题标题】:Rails missing partial *.js.erbRails 缺少部分 *.js.erb
【发布时间】:2021-10-24 02:08:36
【问题描述】:

我试图在不重新加载整个页面的情况下通知用户有关错误,但我收到错误“AnswersController#create 缺少此请求格式和变体的模板”

create.js.erb

$('.answer-errors').html("<%= render 'shared/errors', resource: @answer %>");

AnswersController#create

def create
  @answer = question.answers.build(answer_params)

  if @answer.save
    redirect_to question, notice: t('.success')
  end
end

app/views/shared/_errors.html.slim 存在。

app/views/answers/_form.html.slim - 这是新答案的表单

= form_with model: [question, answer], class: 'form-answer hide' do |form|
 = form.label :body
 = form.text_area :body
 = form.submit 'Save'

控制台日志。我在这里看到“由 AnswersController#create 作为 HTML 处理”,但它应该是“..as js”吗?

Started POST "/questions/3/answers" for 127.0.0.1 at 2021-08-23     21:19:08 +0300
Processing by AnswersController#create as HTML
  Parameters: {"authenticity_token"=>"[FILTERED]", "answer"=>    {"body"=>""}, "commit"=>"Save", "question_id"=>"3"}
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  Question Load (0.7ms)  SELECT "questions".* FROM "questions" WHERE "questions"."id" = $1 LIMIT $2  [["id", 3], ["LIMIT", 1]]
  ↳ app/controllers/answers_controller.rb:27:in `question'
Completed 406 Not Acceptable in 8ms (ActiveRecord: 1.3ms | Allocations: 4424)

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

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

哪里有问题?

【问题讨论】:

  • 在表单中添加remote: true
  • 如果您使用remote: trueform_with 默认为remote: true)并且它仍然无法正常工作,那么您遇到了 Rails UJS 问题。检查您的浏览器控制台是否有错误,并确保它在您的包或资产管道中。 guides.rubyonrails.org/…
  • @DyaniyalWilson 我编辑了我的答案以明确我正在使用 from_with

标签: javascript ruby-on-rails ajax renderpartial


【解决方案1】:

非常感谢@max 提供的指导链接。

form_with model: [question, answer], class: 'form-answer hide', local: false do..

这项工作很好,但我仍然不明白为什么 remote: true 与 local: false 不同。这对我来说是违反直觉的,任何提示都会令人愉快

【讨论】:

  • 因为来自表单的请求是一个 HTML 请求,它将重新加载页面。通过设置remote: true,你正在做一个JS调用,它不会重新加载页面。
  • @TTD 但使用 remote: true 它不起作用。请求以 HTML 格式发送,您可以看到控制台的输出。只有 local: false 改变了这一点。使用 remote: true 我得到:= form_with model: [question, answer], class: 'form-answer-new hide', remote: true do |form| - 导致:由 AnswersController#create 处理为 HTML 和错误:ActionController::UnknownFormat (AnswersController#create 缺少此请求格式和变体的模板。request.formats: ["text/html"] request.variant: [] ):
  • ..这里已经有标记 data-remote="true":
猜你喜欢
  • 2014-10-08
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多