Я не могу попробовать это, пока не вернусь домой, но я бы предпочел просто передать @post. Возможно, я спрашиваю слишком много, но для меня странно, что рельсы могут вычислять месяц и день по умолчанию, но используют идентификатор в качестве года.

даю приложение блога на Rails 3 и хочу переопределить выставочный маршрут по умолчанию, сгенерированный для поста, выполнив

resources :posts, :except => :show

Который генерирует, для маршрута показа (если бы я не исключил его),

/post/:id

Вместо этого я хочу, чтобы мой маршрут выглядел следующим образом, где url_title - это строка, сгенерированная моей моделью в before_save, где он удаляет не алфавитно-цифровые символы и заменяет пробелы дефисами.

/:year/:month/:day/:url_title

Я пытаюсь сделать это с помощью этого кода:

match "/:year/:month/:day/:url_title", :to => "posts#show", :as => :post

Теоретически это должно позволить мне вызвать post_path (@post) (где @post - это экземпляр моего класса post), и он должен иметь возможность разобраться с этим маршрутом, и этопочти работает.

Единственная проблема заключается в том, что он пытается заменить идентификатор сообщения в течение года. Остальные поля заполнены правильно. Я думаю, что это происходит из-за того, что у rails есть поведение по умолчанию, которое заставляет его действительно, очень хотеть иметь идентификатор в URL, и оно не доверяет мне использовать мой собственный уникальный идентификатор (в данном случае post.url_title).

Хотя я могу ошибаться по этому поводу. Кто-нибудь имеет опыт работы с такого рода маршрутизацией или знает, что случилось?