Javascript Rails远程表单发送html而不是js

Javascript Rails远程表单发送html而不是js,javascript,ruby-on-rails,ruby-on-rails-4,Javascript,Ruby On Rails,Ruby On Rails 4,我在Rails 4应用程序中有一个远程表单_,它没有请求JavaScript响应。单击表单上的“提交”时,我遇到未知信息错误。据说这些参数是: {"utf8"=>"✓", "authenticity_token"=>"eAzS1lELwDL9Qt+fM2hAPlPmCxCgFPuAvl1QYWOIL3IBPdrnxn0woYYC+5uzGjyqH3lQxGxWGrYq/fnMrFNfnw==", "artist"=>{"name"=>"Joe"}, "commit"

我在Rails 4应用程序中有一个远程表单_,它没有请求JavaScript响应。单击表单上的“提交”时,我遇到未知信息错误。据说这些参数是:

{"utf8"=>"✓",
 "authenticity_token"=>"eAzS1lELwDL9Qt+fM2hAPlPmCxCgFPuAvl1QYWOIL3IBPdrnxn0woYYC+5uzGjyqH3lQxGxWGrYq/fnMrFNfnw==",
 "artist"=>{"name"=>"Joe"},
 "commit"=>"Save Artist"}
我的表格编号是:

= form_for(@artist, remote: true, authenticity_token: true) do |f|
  - if @artist.errors.any?
    #error_explanation
      %h2= "#{pluralize(@artist.errors.count, "error")} prohibited this artist from being saved:"
      %ul
        - @artist.errors.full_messages.each do |msg|
          %li= msg

  .field
    = f.label :name
    = f.text_field :name
  .actions
    = f.submit 'Save Artist'
我有一个create.js.erb文件,ArtistsController中的create方法如下所示:

  def new
    @artist = Artist.new

    respond_to do |format|
      format.js
    end
  end

  def create
    @artist = Artist.new(artist_params)

    if @artist.save
      respond_to do |format|
        format.js
      end
    end
  end
我的表格是:

= form_for @show, html: {role: 'form'} do |f|
  - if @show.errors.any?
    #error_explanation
      %h2= "#{pluralize(@show.errors.count, "error")} prohibited this venue from being saved:"
      %ul
        - @show.errors.full_messages.each do |msg|
          %li= msg

  .row
    = f.label :venue_id
    = f.collection_select :venue_id, Venue.all, :id, :name, class: 'form-control'
  .row
    .col-sm-6
      = link_to 'New Artist', new_artist_path, id: :new_artist_link, remote: true
  .row.row-centered
    .col-sm-6
      .form-group
        = f.label :date
        = f.date_select :show_date, order: [:day, :month, :year], class: 'form-control'
    .col-sm-6
      .form-group
        = f.label :doors_open
        = f.time_select :doors_open, class: 'form-control'
  .row.row-centered
    .col-sm-6
      .form-group
        = f.label :dinner_starts
        = f.time_select :dinner_starts, class: 'form-control'
    .col-sm-6
      .form-group
        = f.label :show_starts
        = f.time_select :show_starts, class: 'form-control'
  .row.row-centered
    .col-sm-6
      .form-group
        = f.label :dinner_ends
        = f.time_select :dinner_ends, class: 'form-control'
    .col-sm-6
      .form-group
        = f.label :show_ends
        = f.time_select :show_ends, class: 'form-control'

  .form-group
    = f.submit 'Save Show', class: 'btn btn-default'
我的艺术家视图中的新.js.erb文件是:

$('#new_artist_link').hide().after("<%= j render 'form' %>");
$('#new_artist').remove();
控制台输出:

tarted GET "/artists/new" for 127.0.0.1 at 2015-02-26 22:46:12 -0600
Processing by ArtistsController#new as JS
  Rendered artists/_form.html.haml (2.7ms)
  Rendered artists/new.js.erb (4.2ms)
Completed 200 OK in 15ms (Views: 8.8ms | ActiveRecord: 0.2ms)


Started POST "/artists" for 127.0.0.1 at 2015-02-26 22:46:16 -0600
Processing by ArtistsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"0dhmOLTBguCAn4gdaIE0D0PyokHp4RLLZ8DDeqiA21Wo6W4JI7dyc/vfrBno80ibD235lSWj8/3zYGrXZ1uruA==", "artist"=>{"name"=>"fsa"}, "commit"=>"Save Artist"}
   (0.1ms)  begin transaction
  SQL (0.2ms)  INSERT INTO "artists" ("name", "created_at", "updated_at") VALUES (?, ?, ?)  [["name", "fsa"], ["created_at", "2015-02-27 04:46:16.795869"], ["updated_at", "2015-02-27 04:46:16.795869"]]
   (209.8ms)  commit transaction
Completed 406 Not Acceptable in 213ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/artists_controller.rb:20:in `create'


  Rendered /home/ryan/.rvm/gems/ruby-2.2.0@DoseyDoe/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/_source.erb (5.1ms)
  Rendered /home/ryan/.rvm/gems/ruby-2.2.0@DoseyDoe/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/_trace.html.erb (3.0ms)
  Rendered /home/ryan/.rvm/gems/ruby-2.2.0@DoseyDoe/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/_request_and_response.html.erb (0.9ms)
  Rendered /home/ryan/.rvm/gems/ruby-2.2.0@DoseyDoe/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/_web_console.html.erb (0.8ms)
  Rendered /home/ryan/.rvm/gems/ruby-2.2.0@DoseyDoe/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/diagnostics.html.erb within rescues/layout (26.7ms)
编辑:我不知道这是否有区别,但远程表单是另一个模型的表单

编辑2:修复了创建方法-仍然没有骰子。添加了我正在使用的链接到创建艺术家的表单模板

编辑3:添加控制台输出

编辑4:添加了create.js.erb

尝试将format参数添加到表单_中。默认情况下,您请求的是html响应,而您的控制器不知道如何回答。请求js响应应该可以解决这个问题

= form_for(@artist, format: :js, authenticity_token: true) do |f|

刚刚遇到同样的错误,经过几个小时的调试,发现rails ujs是必需的,但没有正确加载。 如果您正在使用webpack,请确保启动ujs。在我的情况下,我忘记了开始;选项,即

import Rails from '@rails/ujs'; 
Rails.start();


如果您喜欢require语法。

您的create方法实际上并不创建记录。它只会初始化。把它修好,看看能不能用。您需要@artist.save或将artist.new更改为artist。create@Mingsheng还是没有骰子。我用新的代码更新了原来的帖子,并添加了更多的代码-也许这会有所帮助。请输出Web服务器控制台!这是第一个发现你的应用程序认为你在要求什么以及它告诉你什么的地方。另外,它还有助于从生成的页面中查看HTML的实际相关块。您可以检查表单是否正在请求javascript吗?这可能就是为什么您的控制器会感到困惑,因为只有format.js。似乎您正在请求htmlhere@Mingsheng我怎么检查?我的印象是添加remote:true使其请求JavaScript。好吧,这是可行的,但现在它只是在我的响应中显示JavaScript。我的create.js.erb文件应该删除用于创建新艺术家的表单。所发生的一切就是它用我的create.js.erb文件中的jQuery文本替换了页面上的所有内容。嗯,很有趣。我认为remote:true让它请求js响应?remote:true的意义何在?@thomyorkke应该是这样,但这需要加载rails javascript实用程序,而在本例中可能不是这样。确保包含jquery_ujs库或今天的等效库。我已经确保了jquery_ujs和jquery,但我仍然只是获取文本,而不是运行jquery。我有其他jQuery在网站上运行良好。有什么建议吗?问题中是否张贴了create.js.erb文件?我没有看到。我的/app/javascript/packs/application.js中有后者,但我仍然会收到一个html呈现作为回报。我的调用是type=xhr,由rails-ujs发起。有什么提示吗?您可能已经尝试过在表单中设置format::js,对吗?谢谢您的回复。我发现了我的问题。在rails 6中,布局也将应用于js文件,除非您将其命名为layout.html.erb
require("@rails/ujs").start();