У меня возникла ситуация, когда у меня есть 10 ресурсов (контроллеров), которые соответствуют 10 записям базы данных.В частности, речь идет о зданиях.Имеется контроллер city_center, контроллер лесопилки и многое другое.
Я не хотел создавать контроллер_положения зданий и обрабатывать там все, так как каждое здание ведет себя по-разному.
Но у меня есть вопрос помаршруты и как справиться с конкретной ситуацией.В идеале я хотел бы, чтобы URL были такими:
/town_center/view
/sawmill/view
Это нормально, но у меня есть фундаментальная проблема.Нет простого способа получить идентификационный номер town_center из URL.Мне, конечно, понадобится эта информация, чтобы получить информацию о модели конкретного здания.Теперь можно утверждать, что я могу просто использовать это:
/town_center/view/1
/sawmill/view/2
Что кажется нормальным, но создает другую фундаментальную проблему, а именно, что мне нужно указать идентификатор, когда я перенаправляю с другого контроллера.Скажите, что я хочу перенаправить на контроллер town_center.Мне нужно было бы сделать:
redirect_to town_center_url(1)
Что мне действительно не нравится, потому что идентификатор может измениться в любое время в моей базе данных и, как правило, это плохая практика программирования, очень подверженная ошибкам.
Как бы вы справились с этим?Мне не хватает более простого способа?
РЕДАКТИРОВАТЬ:
ПРИМЕРНЫЕ МАРШРУТЫ С ИДЕИ НЕОБХОДИМОСТИ
scope :path => '/town_center', :controller => :town_center do
get '/view/:id' => :view, :as => 'town_center'
end
scope :path => '/sawmill', :controller => :sawmill do
get '/view/:id' => :view, :as => 'sawmill'
end
ПРИМЕР ИСПОЛЬЗОВАНИЯ
Начиная с / обзор, мысм. список строительных ссылок, таких как:
/town_center/view/1
/sawmill/view/2
Если щелкнуть первый элемент, будет выполнено действие просмотра с идентификатором: 1.Хорошо до сих пор.Но скажем, что в этом шаблоне представления есть действие типа send_message.Теперь это действие выглядит так:
def send_message
send_the_message_blah_blah
redirect_to sawmill_url(2)
end
Теперь, я думаю, проблема ясна.Чтобы перенаправить на путь к лесопильному заводу, мне нужно знать его идентификатор, что означает, что мне нужно будет сделать дополнительный запрос без какой-либо реальной причины, например:
def send_message
send_the_message_blah_blah
redirect_to sawmill_url(Building.where(:name=>'sawmill').first)
end
И если я этого не сделаювообще включите: id в url, тогда мое действие просмотра просто не знает, на какое здание оно должно ссылаться.