簡體   English   中英

將自定義路由添加到控制器時出錯

[英]Error adding custom route to controller

為了更准確,我重寫了我的問題。 我有一個銀行帳戶控制器/模型。

我的控制器上有以下方法

def search
  #@ledgeritems = Ledgeritem.where("bankaccount_id = ? and transactiondate >= ? and transactiondate < ?", params[:bankaccount_id], params[:startdate], params[:enddate])
  @bankaccount = Bankaccount.find(params[:bankaccount_id])
  respond_to do |format|
    format.js { render :partial => "bankaccount/bankledger" }
  end
end

我做了兩次嘗試來稱呼它。

嘗試1

嘗試路線1

resources :bankaccounts do
    post "search"
end

當我做耙子時,這顯示了以下路線

bankaccount_search POST   /bankaccounts/:bankaccount_id/search(.:format) bankaccounts#search

呼叫嘗試1的Javascript

$.ajax({
    type: "POST",
    url: "/bankaccounts/" + bank_account_id + "/search.js",
    data: $('#edit_bankaccount_' + bank_account_id).serialize(),
    success: function (result, status) {
        $('#bank_ledger_div').html(result);
    }
});

這將在我的控制器上調用正確的路由,但是服務器將其視為PUT而不是POST,並返回404。

嘗試2

嘗試路線2

resources :bankaccounts do
  collection do
    post "search"
  end
end

當我做耙子時,這顯示了以下路線

search_bankaccounts POST   /bankaccounts/search(.:format)       bankaccounts#search

呼叫嘗試2的Javascript

$.ajax({
    type: "POST",
    url: "/bankaccounts/search.js",
    data: $('#edit_bankaccount_' + bank_account_id).serialize(),
    success: function (result, status) {
        $('#bank_ledger_div').html(result);
    }
});

這將調用更新路由,但仍顯示為PUT命令。 在Firebug中,我看到500錯誤,結果如下

Couldn't find Bankaccount with id=search

通常,此錯誤表示您正在發出GET請求而不是POST請求。

例如:

假定GET / bankaccounts / search正在請求SHOW頁以獲取ID = search的銀行帳戶

POST / bankaccounts / search可以正確執行您的操作。

編輯:

resources :bankaccounts do
  collection do
    post "search"
  end
end

也是正確的。 現在,我注意到您正在執行此操作來獲取數據:

data: $('#edit_bankaccount_' + bank_account_id).serialize()

該表單中可能包含一個隱藏字段,該字段由rails放置在其中,名稱為“ _method”,值為“ PUT”。 這就是說服您POST實際上是PUT的令人信服的地方。 您需要將其從序列化數據中刪除,以便正確發布表單。

如果要使用/search網址而不指定ID,則應將其聲明為collection操作:

resources :bankaccounts do
  collection do
    post "search"
  end
end

您可以使用rake routes命令檢查應用程序中定義的rake routes ,以確保定義了您想要的內容。

網址為預期格式

/bankaccounts/:bankaccount_id/search

錯誤是否來自此方法? / bankaccounts / search是否可以匹配其他路線?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM