Неверный URL с параметризацией

Я пытаюсь переписать URL-адрес с параметризацией, как описано здесь: Как мне переписать URL-адреса на основе заголовка?

Вот моя модель:

class Article < ActiveRecord::Base
  belongs_to :category

  self.per_page = 5

  def to_param
    "#{title.parameterize}"
  end
end

И моя ссылка:

<%= link_to(article.title, blog_article_path(article), {:class => "blog_title"}) %>

Проблема в том, что у меня нет такой ссылки, как /blog/article/"my-article-title", но есть /blog/article."my-article-title", что неверно и не интерпретируется.

Вы знаете причину?

Мой маршрут.rb:

get "blog/index"
get "blog/category"
get "blog/article" (I don't use the show action of my article controller, is it the reason ?)

resources :categories

resources :articles

Спасибо


person eluus    schedule 25.03.2013    source источник
comment
Не могли бы вы опубликовать соответствующие части вашего файла routes.rb?   -  person Bitterzoet    schedule 25.03.2013


Ответы (1)


Использование link_to таким образом, как вы передаете ресурс, действительно работает только тогда, когда вы действительно используете ресурсы в своем файле маршрута.

В этом разница (вывод рейк-маршрутов) при использовании нересурсного маршрута и маршрута, сгенерированного ресурсами:

blog_article GET    /blog/article(.:format)

article GET    /articles/:id(.:format)

Когда вы используете article_path(@article), он заполнит :id идентификатором ресурса.

Я бы посоветовал вам использовать действие show контроллера статей, чтобы у вас было /blog/articles/:id, или вы могли бы сделать что-то вроде этого, если вы действительно хотите эту маршрутизацию:

get "blog/article/:id" => "articles#show", :as => 'blog_article'

который превращается в:

blog_article GET    /blog/article/:id(.:format)

В официальных руководствах есть полезная информация по этому поводу.

person Bitterzoet    schedule 25.03.2013
comment
Это потому, что find всегда будет искать запись по столбцу идентификатора. По сути, он просто делает "my-article-title".to_i, что в данном случае оценивается как 0. Есть 2 варианта: используйте #{id}-title.parameterize, чтобы он генерировал URL-адреса, такие как /articles/1-my-title (при выполнении .to_i он найдет запись с идентификатором 1), или с помощью другого столбца, чтобы найти статью. Я предлагаю посмотреть этот railscast: railscasts.com/episodes/63-model -имя-в-url-пересмотрено - person Bitterzoet; 25.03.2013