Ну, да. Конечно, если бы у нас была машина времени, возвращаясь и удостоверяясь, что много функций Javascript было разработано, то по-другому было бы главное времяпрепровождение (что, и обеспечение людей, которые разработали механизм CSS IE, никогда не входил в IT). Но это не собирается происходить, и мы застреваем с ним теперь.
я подозреваю, вовремя, это станет "Машинным языком" для сети, с другой лучше разработанной компиляцией языков и API вниз к нему (и обслужит различные недостатки механизма исполнения).
я не думаю, однако, любой из этих "лучше разработанных языков" будет Java, Python или Ruby. JavaScript, несмотря на способность, которая будет использоваться в другом месте, язык сценариев веб-приложения. Учитывая, что вариант использования, мы можем добиться большего успеха, чем любой из тех языков.
Я думаю, это не работает, потому что вы не используете собственный маршрут. Я делаю это все время. Я просто настраиваю простой настраиваемый маршрут:
map.present_page '/blog/:year/:month/:day/:slug',
:controller => 'posts', :action => 'show'
Тогда вы сможете сделать:
present_page_path(:year => 2009,
:month => "December",
:day => "13",
:slug => "just-an-example")
Причина, по которой вы получаете строку запроса, скорее всего, состоит в том, что rails по какой-либо причине не подключается к вашему маршруту. Использование именованного маршрута явно указывает рельсам использовать этот маршрут. Дайте мне знать, если это поможет вам!
Вот как я это сделал ...
Во-первых, я не пытаюсь использовать метод URL-адресов, созданных на основе маршрута. Кроме того, я не собираюсь в той же степени, что и вы, проверять форматирование параметров даты. Поскольку я автоматически генерирую метки даты и создание URL, меня не беспокоит правильность формата, я просто форматирую объект ActiveSupport :: TimeWithZone.
Начнем с соответствующего маршрута:
map.post_by_date 'content/:year/:month/:day/:slug',
:controller => 'posts',
:action => 'show_by_date_slug'
Поскольку я не хотел беспокоиться о форматировании аргументов или повторении, я создал вспомогательный метод и включил вспомогательный метод в соответствующий контроллер:
def pubdate_slug_url(post)
year = post.published_on.strftime('%Y')
month = post.published_on.strftime('%m')
day = post.published_on.strftime('%d')
url = "/" + ["content", year, month, day, post.slug].join("/")
return url
end
Наконец, на мой взгляд, я просто вызываю метод, передавая свой объект Post:
<h2><%= link_to post.headline, pubdate_slug_url(post) %></h2>
Я получаю такой URL-адрес: http://wallscorp.us/content/2009/12/06/links
Ура.