我已经重写了我的问题以更准确。我有一个银行账户控制器/模型。
我的控制器上有以下方法
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