我想确定index
操作中嵌套资源的父模型。
(重要提示:我index
只询问操作。在所有其他 REST 操作中,找到父模型很简单。在 SO 上也已经回答了几次)
我有这些路线:
resources people do
resources addresses, only: [:index]
end
resources locations do
resources addresses, only: [:index]
end
resources events do
resources addresses, only: [:index]
end
在我想要加载父模型的index
动作中,但是根据匹配的路由,包含父 ID的参数名称会发生变化:AddressesController
/people/1/addresses -> person_id
/locations/1/addresses -> location_id
/events/1/addresses -> event_id
现在我的index
操作中有这段丑陋的代码:
if params[:person_id]
parent_id = params[:person_id]
parent_type = Person
elsif params[:location_id]
parent_id = params[:location_id]
parent_type = Location
else params[:event_id]
parent_id = params[:event_id]
parent_type = Event
end
@addresses = Address.where(
addressable_type: parent_type,
addressable_id: parent_id)
最困扰我的是,每当我添加新的嵌套路由时,我都必须更新我的控制器。
有没有更好的方法来确定父模型?(除了简单地重构上面的代码)