嵌套路由未按预期工作

时间:2016-03-14 21:03:13

标签: ruby-on-rails ruby-on-rails-5

我正在使用rails5.beta创建一个API,我按照指南创建了嵌套路由:http://guides.rubyonrails.org/routing.html#nested-resources

我的模特:

class Paymethod < ApplicationRecord
  has_many :transactions
end

class Transaction < ApplicationRecord
  belongs_to :paymethod
end

和routes.rb

resources :paymethods do
    resources :transactions
end

rake routes给了我:

 paymethod_transactions GET    /paymethods/:paymethod_id/transactions(.:format)     transactions#index

但我总是为任何paymethod_id

获得相同的输出

GET aymethods/1/transactions

[
  {
    "id": 1,
    "amount": 10,
    "user_id": 21,
    "paymethod_id": 1,
  },
  {
    "id": 2,
    "amount": 1,
    "user_id": 21,
    "paymethod_id": 1,
  }
]

和同样的:GET paymethods/2/transactions

[
  {
    "id": 1,
    "amount": 10,
    "user_id": 21,
    "paymethod_id": 1,
  },
  {
    "id": 2,
    "amount": 1,
    "user_id": 21,
    "paymethod_id": 1,
  }
]

那么,为什么它不按paymethod_id过滤结果?

顺便说一下,它适用于像Paymethod.find(2).transactions

这样的导轨

这里有一个控制器: https://gist.github.com/nilsigusi/f59e65dd34495e08eaee

实际上是它的标准控制器,通过创建带有rails的模型生成

1 个答案:

答案 0 :(得分:2)

在你的要点中,你在第59行:( https://gist.github.com/nilsigusi/f59e65dd34495e08eaee#file-gistfile1-txt-L59

@transactions = Transaction.all

返回所有交易记录,不应用任何条件。

替换为:

@transactions = Transaction.where(paymethod_id: params[:paymethod_id])

获取属于paymethod的所有交易记录。