我有一个这样的类:
class Child < ApplicationRecord
belongs_to :father
belongs_to :mother
end
我的目标是创建终结点
- 基本网址/父亲/孩子 #get 所有孩子为父亲
- 基本网址/母亲/孩子 #get 所有孩子为母亲
我想知道嵌套这些资源的正确方法是什么,我知道我可以以一种方式做到这一点,例如:
class ChildrenController < ApplicationController
before action :set_father, only: %i[show]
def show
@children = @father.children.all
render json: @children
end
...
但是我怎样才能为基本网址/母亲/子获得相同的信息,这可以通过嵌套资源实现吗? 我知道如果需要,我可以对 routes.rb 进行编码以指向特定的控制器功能,但我想了解我是否遗漏了什么,如果我是,我不确定阅读活动记录和操作包文档。
我使用的实现如下: 我的子控制器:
def index
if params[:mother_id]
@child = Mother.find_by(id: params[:mother_id]).blocks
render json: @child
elsif params[:father_id]
@child = Father.find_by(id: params[:father_id]).blocks
render json: @child
else
redirect_to 'home#index'
end
end
...
我的路由.rb文件:
Rails.application.routes.draw do
resources :mother, only: [:index] do
resources :child, only: [:index]
end
resources :father, only: [:index] do
resources :child, only: [:index]
end
...
- base_url/母亲/{mother_id}/孩子 #get 所有孩子为母亲
- base_url/父亲/{father_id}/孩子 #get 所有孩子为父亲