Для каждого вида у меня много наборов данных.Для каждого набора данных у меня есть много фенотипов.У наборов данных есть имена, которые в пределах вида являются первичными ключами.Виды также имеют строковые первичные ключи (например, Hs для Homo sapiens).Итак, я хочу иметь возможность указать фенотип следующим образом:
/species/Hs/mcgary/1
, где mcgary - имя (слаг) набора фенотипов.
Я понимаю, что могу получить этот видрезультата, добавив следующие строки в мой файл rout.rb:
match "/species/:species_id/:dataset(/:id/:action)" => 'phenotypes'
match "/species/:species_id/:dataset/:id" => 'phenotypes#show'
Phenotypes - это контроллер фенотипа.У Species есть контроллер, но у Dataset нет - его функции обрабатываются контроллерами Species и Phenotype.)
К сожалению, это не гарантирует, что пути будут работать, например, edit_species_dataset_phenotype_path
.Я не совсем уверен, как написать эту инструкцию в rout.rb.Одна из возможностей состоит в том, чтобы иметь в дополнение к инструкциям по совпадению следующее:
resources :species do
resources :dataset do
resources :phenotypes
end
end
и просто установить перенаправление.Но это неловко.Есть ли какой-нибудь способ, которым я могу использовать запись соответствия, чтобы заставить пути работать?Мне нравятся новые маршруты, но хотелось бы, чтобы в документации было несколько полных примеров.
Я также заметил, что если я сделаю что-то вроде edit_species_dataset_path (видами, набором данных), я смогу получить формат маршрута /species/:species_id/:phenotype_set_id
- ноЯ не уверен, как заставить его использовать: abbrev вместо Species, за исключением того, чтобы каждый раз печатать видов.аббрев.Есть ли способ сказать ему, чтобы использовать этот столбец по умолчанию, а не идентификатор?
Большое спасибо.(И да, я понимаю, что такие вложенные маршруты становятся неловкими. Я в порядке.)