アクションでネストされたリソースの親モデルを特定したいと考えてい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
myのindex
アクションでAddressesController
親モデルを読み込みたいのですが、マッチしたルートによって親IDを含むパラメータ名が変わります:
/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)
最も気になるのは、新しいネストされたルートを追加するたびにコントローラーを更新する必要があることです。
親モデルを決定するより良い方法はありますか? (上記のコードを単純にリファクタリングする以外に)