ActionController::将Bootstrap安装到我的项目后出现未知格式错误



在将Bootstrap添加到项目之前,一切都很好。现在我收到ActionController::UnknownFormat错误。我之前在我的项目中使用jquery(添加了yarn(。但在安装Bootstrap时,我还为它安装了带有gem的jquery。也许里面有问题。谢谢你的帮助。

comments_controller.rb

def create
@book = Book.find(params[:book_id])
@comment = @book.comments.create(comment_params)
respond_to :js
end

create.js.erb

$(".comment").append("<%= escape_javascript(render(@comment))%>");

_comment.html.erb

<p><strong><%= comment.title %></strong> | <%= comment.commenter %></p>
<p><%= comment.content %></p>

控制台输出

app/controllers/comments_controller.rb:17:in `create'
Started POST "/books/2/comments" for 127.0.0.1 at 2020-10-30 14:45:28 +0300
Processing by CommentsController#create as HTML
Parameters: {"authenticity_token"=>"PT6Go3HJURAbU7olooyAVa7j5Xna9NlfulH62DPt/JbcfRXw1cWEujnfNhhjmafyncB9tMkefUKT09z+d0ryiQ==", "comment"=>{"title"=>"a", "content"=>"s", "commenter"=>"user", "approved"=>"false"}, "commit"=>"Create Comment", "book_id"=>"2"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
Book Load (0.2ms)  SELECT "books".* FROM "books" WHERE "books"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
↳ app/controllers/comments_controller.rb:15:in `create'
(0.1ms)  BEGIN
↳ app/controllers/comments_controller.rb:16:in `create'
Comment Create (0.4ms)  INSERT INTO "comments" ("title", "content", "approved", "book_id", "created_at", "updated_at", "commenter") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["title", "a"], ["content", "s"], ["approved", false], ["book_id", 2], ["created_at", "2020-10-30 11:45:28.088322"], ["updated_at", "2020-10-30 11:45:28.088322"], ["commenter", "utkucb"]]
↳ app/controllers/comments_controller.rb:16:in `create'
(0.8ms)  COMMIT
↳ app/controllers/comments_controller.rb:16:in `create'
Completed 406 Not Acceptable in 9ms (ActiveRecord: 1.8ms | Allocations: 5589)


ActionController::UnknownFormat (ActionController::UnknownFormat):

app/controllers/comments_controller.rb:17:in `create'

我正在使用此表单访问books/show.html.erb中的CommentsController#create

<%= form_with(model: [ @book, @book.comments.build ], local: false) do |form| %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :content %><br>
<%= form.text_area :content %>
</p>
<%= form.hidden_field :commenter, value: current_user.username %>
<%= form.hidden_field :approved, value: false %>
<p>
<%= form.submit %>
</p>
<% end %>

我的Rails版本是Rails 6.0.3.4,Bootstrap版本是5.0.0.alpha1。我用这个教程来使用jquery,一切都很好。然后用这个来添加引导。

您可以尝试一下。

# app/views/books/show.html.erb
<%= form_with [@book, @book.comments.build], remote: true do |form| %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :content %><br>
<%= form.text_area :content %>
</p>
<%= form.hidden_field :commenter, value: current_user.username %>
<%= form.hidden_field :approved, value: false %>
<p>
<%= form.submit %>
</p>
<% end %>

form_with方法接受一堆选项。为了理解您想要访问哪个路由,您应该明确指定:format:url其他参考文件

只需将form_with更改为该

<%= form_with(model: [ @book, @book.comments.build ], format: :js) do |form| %>

<%= form_with(model: [ @book, @book.comments.build ], url: comments_path) do |form| %>

我尝试在浏览器中调试,发现'Uncaught ReferenceError: $ is not defined'错误。更改为config/webpack/environment.js以下的代码,并删除application.js.中的require('packs/jquery')

在这个答案中使用了解决方案。

const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery',
jquery: 'jquery',
'window.jQuery': 'jquery',
Popper: ['popper.js', 'default']
}))

module.exports = environment

最新更新