ruby on rails -添加自定义路由到控制器错误



为了更准确,我重写了我的问题。我有一个银行账户控制器/模型。

我有以下方法在我的控制器

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

这显示了当我执行rake

时的以下路由
bankaccount_search POST   /bankaccounts/:bankaccount_id/search(.:format) bankaccounts#search

Javascript调用尝试1

$.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

这显示了当我执行rake

时的以下路由
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请求ID = search

的银行账户的SHOW页面

,

POST/bankaccounts/search会正确地命中你的动作。

编辑:

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

也是正确的。现在我注意到您正在这样做以获取数据:

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

表单中可能有一个隐藏字段,由rails放置在那里,name='_method'和value=' put '。这就是让rails相信您的POST实际上是PUT的原因。为了正确发布表单,您需要从序列化数据中删除它。

如果您希望在不指定id的情况下使用/search url,您应该将其声明为collection操作:

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

你可以用rake routes命令检查你的应用程序中定义的路由,以确保你定义了你的意思

URL期望的格式为

/bankaccounts/:bankaccount_id/search

错误来自这个方法吗?/银行账户/搜索是否匹配另一条路径?

相关内容

  • 没有找到相关文章