Как заставить url_helper передавать постоянную ссылку вместо id в Rails? - PullRequest
1 голос
/ 02 июня 2011

У меня есть следующий маршрут в моем проекте Rails3:

match "/blog/:permalink" => "posts#show", :as => :post

Когда я делаю ссылку на свой пост в таком виде:

<%= link_to @post.title, post_path(@post) %>

Идентификатор сообщения передается в помощник post_path (хотя мой маршрут указывает, что постоянная ссылка пройдена.

Как заставить post_path отправить постоянную ссылку вместо идентификатора сообщения? Я могу явно назвать post_path(@post.permalink), но это кажется грязным.

Я что-то упустил в своем маршруте?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

Определите метод to_param в модели, который возвращает строку, которую вы хотите использовать.

class Post < ActiveRecord::Base
  def to_param
    permalink
  end
end

См. эту страницу , этот Railscast , (и, конечно, Google ) для получения дополнительной информации.

[Изменить]

Не думаю, что Полиморфные помощники URL достаточно умны, чтобы справиться с тем, что вы хотите сделать здесь. Я думаю, у вас есть два варианта.

1. Используйте специальный именованный маршрут и передайте параметр, аналогичный вашему вопросу и ответу Джитса.

match "/blog/:permalink" => "posts#show", :as => :post

и ссылка на него

<%= link_to @post.title, post_path(:permalink => @post.permalink) %>

2. Создайте новый помощник, который сгенерирует для вас URL

match "/blog/:permalink" => "posts#show", :as => :post_permalink

и помощник

def permalink_to(post)
  post_permalink_path(post.permalink)
end

и по твоему мнению

<%= link_to @post.title, permalink_to(@post) %>
0 голосов
/ 03 июня 2011

Попробуйте что-то вроде этого:

<%= link_to @post.title, post_path(:permalink => @post.permalink) %>

Rails должен автоматически создать URL в соответствии с вашими маршрутами (т.е. заменить :permalink соответственно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...