我有模特爸爸,妈妈和小孩。我已经在为爸爸使用这个孩子的index
动作,并且在孩子控制器中为妈妈做了另一个叫做mom_index
的动作,因为一个孩子属于一个妈妈和一个爸爸。
现在爸爸的路线是:
dad_kids GET /dads/:dad_id/kids(.:format) kids#index
因为:
resources :dads do
resources :kids
end
我需要妈妈的路线去:
mom_kids GET /moms/:mom_id/kids(.:format) kids#mom_index
但是这样做:
resources :moms do
resources :kids
end
使用已经被父亲使用的孩子的索引动作。如何使用Kids mom_index
操作来实现此目的?
答案 0 :(得分:3)
您可以使用if
语句检查请求是针对dads
还是moms
等:
#app/controllers/kids_controller.rb
Class KidsController < ApplicationController
def index
if params[:mom_id].present?
# mom logic
elsif params[:dad_id].present?
#dad logic
end
end
end
另一种方法是设置不同的控制器(但不建议这样做,因为它不是DRY):
#config/routes.rb
resources :moms do
resources :moms_kids, as: "kids" #-> domain.com/moms/:mom_id/kids
end
答案 1 :(得分:2)
最好让kids
控制器知道如何处理被爸爸或妈妈命名空间使用或者制作两个名为dads_kids
和moms_kids
的独立资源。
因此,对于第一个选项,您可以保留您拥有的路线,但让孩子控制器操作更智能/超载。
对于第二个选项,你会这样做:
resources :dads do
resources :dads_kids
end
resources :moms do
resources :moms_kids
end
然后你将拥有2个控制器dads_kids_controller.rb
和moms_kids_controller.rb
。