Rails远程表单发送html而不是js
Rails remote form sends html instead of js
我的Rails 4应用程序中有一个远程form_for
,它没有请求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'
我的艺术家视图中的new.js.erb
文件是:
$('#new_artist_link').hide().after("<%= j render 'form' %>");
在我的艺术家看来,我的create.js.erb
是:
$('#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
参数添加到form_for
。默认情况下,您请求html
响应,而您的控制器不知道如何回答。请求js
响应应该可以修复它。
= form_for(@artist, format: :js, authenticity_token: true) do |f|
刚刚遇到同样的错误,经过几个小时的调试,发现rails ujs
是必需的,但没有正确加载。如果您使用的是webpack
,请确保使用start
ujs
。在我的情况下,我忘记了start();
选项,即
import Rails from '@rails/ujs';
Rails.start();
或
require("@rails/ujs").start();
如果您喜欢require
语法。
相关文章:
- 旋转按钮[HTML][JS]
- 在ajax中发送html+JS
- 使用服务器上的HTML/js在网页上显示图像
- 为什么我从浏览器修改html/js时会多次发送ajax请求
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 当按下箭头键时,我的图像以一种奇怪的方式跳跃(HTML+JS)
- Html+js+css的打包程序
- 使用Sails.JS为静态HTML/JS应用程序提供身份验证
- HTML/JS表单已提交两次
- Heroku类型的简单HTML/JS应用程序托管
- HTML JS在DIV中附加随机图像
- 如何将从GWT编译的JS添加/访问到另一个外部HTML / JS项目中
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- HTML + JS:设置文本区域内容样式的最佳方式
- 如何在html / JS中展开或关闭内容 - 始终分配给不同的id
- HTML/JS 如何输入文本并使其显示在屏幕上
- 从导入的 HTML/JS 文件中提取变量
- 我们怎么知道消除HTML/JS/CSS文件中的空白可以缩短页面加载时间呢
- "捆绑;仅适用于HTML/JS的解决方案
- 是否覆盖网站上文本输入区域的默认移动设备键盘?(HTML/JS/jQuery)