2013-01-10 58 views
0

我已将我的问题重写为更准确。我有一个bankaccounts控制器/模型。将自定义路由添加到控制器时出错

我有我的控制器

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 

的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 

这显示了以下路线,当我做耙子

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

的Javascript FO r呼叫尝试2

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

这将调用更新路由,但仍显示为PUT命令。在萤火虫我看到一个500错误结果如下

Couldn't find Bankaccount with id=search 
+0

你打了什么网址? – Swards

+0

我用Firebug检查它,发现它是一个设置为localhost的帖子:3000/bankaccounts/search – Jhorra

回答

2

通常这个错误意味着你正在做一个GET请求而不是POST请求。

例如:

GET/bankaccounts /搜索被假定为请求与ID =搜索中的BankAccount

虽然

POST/bankaccounts /搜索将正确打你的行动SHOW页。

编辑:

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

是正确的为好。现在我注意到,你这样做是为了让您的数据:

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

形成可能有它的隐藏字段,放在那里的轨道,与NAME =“_法”和值=“把”。这就是令人信服的rails,你的POST真的是PUT。您需要从序列化数据中删除该数据才能正确发布表单。

+0

我更新了我的问题以显示我正在使用的ajax。我可以在Firebug中看到这是一个发布请求,它将进入本地主机:3000/bankaccounts/search – Jhorra

+0

我已经重写了我的问题,以更好地展示我在做什么和看到什么。 – Jhorra

+0

我编辑了我的答案,我想我现在看到问题了... – wless1

1

如果你想不指定一个ID使用的/search网址,你应该声明为collection行动:

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

您可以检查您的应用程序定义与rake routes命令的路由,以保证你定义了你的意思。

+0

我更新了路线显示,并在我的耙子我看 search_bankaccounts POST /bankaccounts/search(.:format)bankaccounts#search 但我仍然得到错误 – Jhorra

+0

服务器的日志可能会帮助您了解发生了什么事(哪个控制器和动作被调用,以及哪些参数)。 –

+0

我已经重写了我的问题,以更好地展示我在做什么和看到什么。 – Jhorra

1

的网址期望格式

/bankaccounts/:bankaccount_id/search 

从这个方法来的错误?可以/银行帐户/搜索匹配另一条路线?

+0

我重写了我的问题,以更好地显示我在做什么和看到什么。 – Jhorra

相关问题