我的Artists
模型的Rails 4应用程序中有一个远程表单。我的Shows
有另一种表单,Shows
表单有一个链接,如果用户希望从{{1}内部向数据库中添加新的Artist
,则可以单击该链接形式。点击该链接会向Shows
发送GET
个请求,/artists/new
会为新ArtistsController
分配@artist
,然后呈现Artist
,这会隐藏链接添加新的new.js.erb
并在其位置呈现新Artist
的表单。
表单呈现正常,当我单击提交时,发送Artist
请求并将其路由到我POST
中的create
方法服务器然后发回一个响应在我的ArtistsController
文件中,但该响应被浏览器解释为html。不是执行create.js.erb
中的JavaScript,而只是在浏览器中显示代码。
这是我的create.js.erb
表格
Shows
这是我的= 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'
表格
Artists
以下是我的= form_for(@artist, remote: true, authenticity_token: true, format: :js) 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 'Submit'
和ArtistsController new
方法
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
new.js.erb
我的$('#new_artist_link').hide().after("<%= j render 'form' %>");
。我在这里有实际的代码,但删除了它,然后用它替换它直到我能找出问题。
create.js.erb
我昨天花了一整天的时间试图解决这个问题并且完全不知所措。
编辑:在我的$('h1').hide();
中编写以下jQuery并在我的路由中添加new.js.erb
允许我发布数据,问题是该帖子的接受标头不接受JavaScript。有没有办法不必编写整个ajax请求,只修改现有的请求接受javascript?
更新了post 'artists/create
create.js.erb
答案 0 :(得分:0)
我发现了问题 - 我的POST
接受标头未包含text/javascript
,因此我必须将以下内容添加到new.js.erb
$('#new_artist').submit(function() {
var url = "/artists/create"; // the script where you handle the form input.
$.ajax({
type: "POST",
url: url,
data: $("#new_artist").serialize(), // serializes the form's elements.
accepts: 'application/javascript'
});
return false; // avoid to execute the actual submit of the form.
});
我还必须将post 'artists/create'
添加到routes.rb