Ответ 1
Возможным способом может быть использование таких маршрутов:
map.resources :works do |works|
works.resources :lines
end
map.resources :educations do |edu|
edu.resources :lines
end
Ваш LinesController остается тем же, и вы получите маршруты, подобные этим:
work_lines GET /works/:work_id/lines
....
education_lines GET /educations/:education_id/lines
...
Наиболее раздражающей частью является управление первым переданным идентификатором, потому что у вас будет params[:id]
ссылка на строку, но у вас также будет params[:work_id]
или params[:education_id]
. Здесь вы должны выбрать между проверкой того, какой параметр передан, или, по крайней мере, проанализировать запрошенный url, чтобы определить, в котором вы находитесь (Works, Educations и т.д.).
Надеюсь, что это помогло;)
EDIT:
В соответствии с тем, что появилось в комментариях, вы можете использовать polymorphic_url
/polymorphic_path
(http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html):
Это имеет смысл, если вы используете их следующим образом:
link_to "New Line", polymorphic_url(@line.item,@line)
# => /<educations_or_works>/item_id/lines/line_id
По крайней мере, вы можете даже использовать его для коллекций:
link_to "New Line", polymorphic_url(@line.item,Line.new)
# => /<educations_or_works>/item_id/lines/
Cheers,
а.