Rails将JavaScript呈现为文本

时间:2015-02-27 15:24:38

标签: jquery ruby-on-rails ajax ruby-on-rails-4

我的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

1 个答案:

答案 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