AJAX在Rails的页面更新中不起作用

时间:2018-11-09 03:26:46

标签: ruby-on-rails

我正在尝试在Index.html.erb上使用Ajax构建一个问答应用程序。我设法使表单远程加载,但是在保存记录时,AJAX不起作用,并且用户被带到正常的show.html.erb。除了尚未启动的Ajax之外,其他一切都很好。

我的代码如下:

index.html.erb (包含一部分用于输入,一部分用于结果)

<div>
  <h3 class="section_title">  Q&A </h3>
  <hr>
  <div id="qanda-form" style="display:none;"> </div>
</div>
<div id="qandas">
  <%= render 'qandas/qanda' %>
</div>

_qanda.html.erb (是部分结果)

<% @qandas.each do |my_qanda| %>
  <div class="col-md-9">
    <div>
      Created  <%= local_time(my_qanda.created_at) %>, by  <%= User.find_by(id: my_qanda.user_id).full_name %>
    </div>
  </div>
<% end %>

_form.html.erb (是输入表单-已通过Cocoon嵌套了表单)

<%= simple_form_for @qanda, remote: true do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
  <div class="col-md-12 form-inputs">
    <div class="col-md-8">
      <%= f.input :title, label: 'Q&A Title:' %>
    </div>
  </div>
  <div class="qandasquestions">
    <%= f.simple_fields_for :qandasquestions do |builder| %>
      <% render 'qandas/qandasquestion_fields', f: builder %>
    <% end %>
    <div class="links btn-group" style="min-height: 34px !important">
      <%= f.button :submit, "Publish Q&A", class: "btn btn-default" %>
      <%= link_to_add_association 'Add Question', f, :qandasquestions, class: 'btn btn-default', data: {association_insertion_node: '.qandasquestions', association_insertion_method: :append} %>
      <%= link_to 'Back', qandas_path, class: "btn btn-default" %>
      <%= f.input :company, :as => :hidden, :input_html => {:value => current_user.company} %>
    </div>
  </div>
<% end %>

控制器

def index
  @qandas = Qanda.all
  respond_to do |format|
    @qandas = Qanda.all
    format.html
    format.json
  end
end

def create
  @qanda = current_user.qandas.build(qanda_params)
  respond_to do |format|
    if @qanda.save!
      @qandas = Qanda.all
      format.html { redirect_to @qanda, notice: 'Qanda was successfully created.' }
      format.json {render :layout => false}
    else
      format.html { render :new }
      format.json { render json: @qanda.errors, status: :unprocessable_entity }
    end
  end
end

create.js.erb

$('#qandas').html("<%= j render partial: 'qandas/qanda' %>");
$('#qanda-form').slideUp(350);

new.js.erb

$('#qanda-form').html("<%= j render 'qandas/form' %>");
$('#qanda-form').slideDown(350);

任何人都可以看到为什么Ajax无法启动吗?为什么我要重定向到传统的SHOW页面?

1 个答案:

答案 0 :(得分:1)

尝试将您的代码更新为此,并让我知道它是否有效?

def create
  @qanda = current_user.qandas.build(qanda_params)
  if @qanda.save!
    @qandas = Qanda.all
  else
    @errors = @qanda.errors 
  end
end