0

質問をより正確になるように書き直しました。私は銀行口座のコントローラー/モデルを持っています。

私のコントローラーには次の方法があります

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

私はこれを呼び出すために2つの試みをしました。

試行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);
    }
});

これは私のコントローラーで正しいルートを呼び出しますが、サーバーはそれをPOSTではなくPUTと見なし、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
4

3 に答える 3

2

通常、このエラーは、POSTリクエストではなくGETリクエストを行っていることを意味します。

例えば:

GET / bankaccounts / searchは、ID=searchの銀行口座のSHOWページを要求していると見なされます。

その間

POST /bankaccounts/search would correctly hit your action.

Edit:

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

Is correct as well. Now I'm noticing that you are doing this to get your data:

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

that form likely has a hidden field in it, put there by rails, with name='_method' and value='PUT'. That is what is convincing rails that your POST is really a PUT. You'll need to remove that from the serialized data in order to correctly post the form.

于 2013-01-10T23:06:55.353 に答える
1

URLはフォーマットを期待しています

/bankaccounts/:bankaccount_id/search

このメソッドに起因するエラーですか?/ bankaccounts / searchは別のルートと一致している可能性がありますか?

于 2013-01-10T23:17:43.287 に答える
1

If you want the /search url to be used without specifying an id, you should declare it as a collection action :

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

You can check the routes defined in your app with the rake routes command, to ensure that you defined what you meant.

于 2013-01-10T23:09:07.590 に答える