其他部分不适用于Rails ajax形式

时间:2015-04-20 07:08:13

标签: ruby ajax ruby-on-rails-3.2

我有一个Rails ajax表单提交。当用户提供正确的数据时,它将搜索数据库并相应地进行操作。如果用户提供错误的数据,它应该显示用户警报消息。但它没有发生那样的。

我正在解释下面的代码。

home.html.erb

<% if current_admin %> 
<p class="flash-message"><%=flash[:notice]%></p>

    <div class="col-md-6" style="float:none; margin:auto;">
    <%= form_for :sdf ,:url => {:action => "scan_report" },remote: true do |f| %>
    <% if params[:receipt_no] %>
    <div class="input-group bmargindiv1 col-md-12"> <span class="input-group-addon text-left">Receipt No. Scan :</span>
        <%= f.text_field :Receipt_No,:class => "form-control", :value => params[:receipt_no] %><%= f.submit "Scan Report" %>
    </div>
    <% else %>
    <div class="input-group bmargindiv1 col-md-12"> <span class="input-group-addon text-left">Receipt No. Scan :</span>
        <%= f.text_field :Receipt_No,:class => "form-control",placeholder:"Receipt No. scan" %><%= f.submit "Scan Report" %>
    </div>
    <% end %>
    <% end %>

<% end %>

控制器/ homes_contorller.rb

class HomesController < ApplicationController
    def home
        @sdf=TSdf.new
        respond_to do |format|
          format.html
          format.js
        end
    end
    def scan_report
        if @sdf=TSdf.find_by_Receipt_No(params[:sdf][:Receipt_No])
            if @sdf && @sdf.HCSY_Status=='YES'
                @hcsy=THcsy.find_by_Sdp_Id(@sdf.Sdp_Id)
                @hcsy_deatils=THcsyDetails.find_by_HCSY_ID(@hcsy.id)
                @woods=THcsyFundTypeMaster.find_by_Fund_Type_Code(1)
                @burn=THcsyFundTypeMaster.find_by_Fund_Type_Code(2)
                @good=THcsyFundTypeMaster.find_by_Fund_Type_Code(3)
                @swd=THcsyFundTypeMaster.find_by_Fund_Type_Code(5)
                @photo=THcsyFundTypeMaster.find_by_Fund_Type_Code(6)
            end
        else
            flash[:notice]="Not Found"
        end
    end
end

在这种形式下它只接受正确的输入,但如果用户试图给出错误的输入,则其他部分没有执行。请帮我解决这个错误,让我知道如何在下面进行这个ajax调用格式。

$('form').submit(function() {  
    var valuesToSubmit = $(this).serialize();
    $.ajax({
        type: "POST",
        url: $(this).attr('action'), //sumbits it to the given url of the form
        data: valuesToSubmit,
        dataType: "JSON" // you want a difference between normal and ajax-calls, and json is standard
    }).success(function(json){
        console.log("success", json);
    });
    return false; // prevents normal behaviour
});

请帮帮我。我正在使用Rails版本3.2.19。

1 个答案:

答案 0 :(得分:0)

在这里您向scan_report发送AJAX POST请求,如果成功则应该呈现模板scan_report.js.erb,并且呈现模板将显示在json回调中的success变量中。

但是如果params无效,则会渲染相同的模板,但缺少所有实例变量。并且可能返回空的json或日志中出现错误。

无论如何,如果您想以远程格式更改flash,则应将自定义代码放入fail回调中。像

这样的东西
$("#flash").html('<%= j render flash[:notice] %>');