redirect_to tidak bekerja dengan ajax

Saya telah membuat formulir ajax di modal bootstrap yang membuat posting baru ke dalam database saya. Bentuknya adalah:

<%= form_for @post, remote:true, :html => {:id => "share-needs-form"} do |f| %>
    <div class="modal-body">
        <div id="shareNeedsModalFirstStep">
        <div class="row" style="margin-bottom: 10px">
            <ul class="error-alert hidden share-needs-form-errors col-lg-10 col-centered" id="share-needs-error-alerts"></ul>
    </div>
    <div class="row"style="margin-bottom: 10px;">
        <div class="col-lg-10 col-centered">
            <%= f.text_field(:title, :class => "form-control", :placeholder => "Add a title for e.g I need a designer, in return I can code for you", :id => "title") %>
        </div>
    </div>
    <div class="row" style="margin-bottom: 10px;">
        <div class="col-lg-10 col-centered">
            <%= f.text_area(:description, :rows => "5", :class => "form-control", :id => "description", :placeholder => "Write some description about your idea, so that people who can offer an exchange know what you want to accomplish") %>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-10 col-centered">
            <%= f.text_field(:keywords, :class => "form-control", :id => "keywords", :placeholder => "Add some keywords (not more than 5 and comma(,) separated)") %>
        </div>
    </div>
    </div>
    <div class="row hidden" id="shareNeedsModalSecondStep" >
        <div class="well" style="max-height: 250px; overflow-y: scroll;">
            <div>
            <a href="/id#" style="font-size: 17px;">I need a designer, in return I can code for you</a>
            <p>I need a designer for a game project, I am working on a small 2D game, I can provide my coding skills for you. I am good at making web applications, and...</p>
            </div>
            <hr />
            <a href="/id#" style="font-size: 17px;">I need a designer, in return I can code for you</a>
            <p>I need a designer for a game project, I am working on a small 2D game, I can provide my coding skills for you. I am good at making web applications, and...</p>
            <hr />
            <a href="/id#" style="font-size: 17px;">I need a designer, in return I can code for you</a>
            <p>I need a designer for a game project, I am working on a small 2D game, I can provide my coding skills for you. I am good at making web applications, and...</p>
        </div>
    </div>
    </div>
    <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-warning hidden" id="shareNeedsModalBackButton">Back</button>
    <button type="button" class="btn btn-warning" id="shareNeedsModalContinueButton">Continue</button>
    <%= submit_tag "Share", :class => "btn hidden btn-warning", :id => "shareNeedsModalFormSubmitButton" %>
    </div>
<% end %>

Dan inilah pengontrol yang sesuai:

def create
    @post = Post.new(post_params)
    if @post.save
        redirect_to post_path(@post.id)
    else
        @errors = @post.errors.full_messages
        render :json => @errors.to_json
    end
end

Seperti yang Anda lihat, metode buat membuat postingan baru berdasarkan kolom formulir yang diterima dari post_params. Blok else berfungsi dengan baik yang berarti kesalahan dikembalikan dan ditampilkan dalam tampilan saya menggunakan javascript berikut:

$("#share-needs-form").bind("ajax:complete", function(evt, data, status, xhr) {
    console.log(data.responseText);
    if(typeof data == "object") { //errors were returned as a json "object"
        $("#shareNeedsModalBackButton").click();
        var form_errors_holder = $("#share-needs-error-alerts");
        form_errors_holder.removeClass("hidden");
        form_errors_holder.html("");
        var errors = data;
        for(var i = 0; i < errors.length; i++) {
            form_errors_holder.append("<li>" + errors[i] + "</li>");
        }
    }
});

Namun di pengontrol ketika postingan berhasil disimpan, postingan tersebut tidak dialihkan ke post_path saya, melainkan mengembalikan seluruh html halaman post_path saya. Mengapa pengalihan tidak berfungsi dan bagaimana cara memperbaikinya? Tolong bantu.


person Mohammad Areeb Siddiqui    schedule 04.06.2015    source sumber


Jawaban (1)


Sebenarnya, Anda mengirimkan permintaan js. Oleh karena itu, server mengirimi Anda respons dalam format js. Untuk ini, Anda harus menulis format respon dalam metode pembuatan, sebagai berikut.

def create
  @post = Post.new(post_params)
  respond_to do |format|
    if @post.save
      format.html { redirect_to @post }
      format.js
    else
      format.html { render :new }
      format.js
    end
  end
end

Dan, buat file app/views/posts/create.js.erb dan tulis kode berikut.

<% if @post.errors.empty? %>
   window.location = "<%= post_path(@post) %>";
<% end %>
person Sarwan Kumar    schedule 04.06.2015
comment
dan bagaimana dengan file javascript saya? postingan.js? haruskah aku membiarkannya apa adanya? - person Mohammad Areeb Siddiqui; 04.06.2015
comment
ketika Anda menggunakan formulir jarak jauh, secara otomatis mengirimkan permintaan ajax. Oleh karena itu, Anda tidak memerlukan javascript tambahan. Cukup tulis javascript di create.js.erb sebagai tanggapan. - person Sarwan Kumar; 04.06.2015
comment
Juga, saya mendapatkan kesalahan ini di create.js.erb: metode tidak terdefinisi `kesalahan' untuk nil:NilClass di telepon - person Mohammad Areeb Siddiqui; 04.06.2015
comment
Itu tidak dapat diakses. Apa yang harus saya lakukan? - person Mohammad Areeb Siddiqui; 04.06.2015
comment
Tidak, maaf. kembalikan ke jawaban awal yang berhasil. Maka saya akan menerimanya. :) Terima kasih. :) - person Mohammad Areeb Siddiqui; 04.06.2015