【发布时间】:2012-12-28 16:51:27
【问题描述】:
我想在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
在我的AddressesController的index动作中我想加载父模型,但是根据匹配的路由,包含父ID的参数name会发生变化:
/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)
最困扰我的是,每当我添加新的嵌套路由时,我都必须更新我的控制器。
有没有更好的方法来确定父模型? (除了简单地重构上面的代码)
【问题讨论】:
-
我的方法与您上面的方法非常相似。我希望有人能给你一个好的答案,因为我也很想清理它。
标签: ruby-on-rails ruby-on-rails-3.2 url-routing