2010-09-30 2 views
2

Я пытаюсь получить мои URLs выглядеть следующим образом:Вопрос URL дружественных связей

example.com/posts/id_of_post/title_of_post

У меня есть это в мой контроллер:

match ':controller/:id/:link', :controller => 'posts', :action => 'show' 

Скажем, у меня есть список сообщений .. как я могу ссылаться на них?

<%= link_to 'Show', post %> 

Просто дает обычной/сообщений/ID

На другой ноте, на минуту я делаю URL-дружественные связи, когда создается запись и хранение в базе данных. Было бы лучше создать «на лету»? Это возможно/лучше?

Я видел это в ответ на другой вопрос:

def to_param 
    normalized_name = title.gsub(' ', '-').gsub(/[^a-zA-Z0-9\_\-\.]/, '') 
    "#{self.id}-#{normalized_name}" 
end 

Это будет работать, если я мог бы изменить - к /. Возможное?

ответ

0

Это то, что я сделал:

Я добавил это мой пост # создать:

@post.link = (@post.title.parameterize) 

даст пользователю возможность редактировать заголовок до 5 минут после публикации.

Мой маршрут:

match "/posts/:id/:link" => "posts#show", :as => "story" 

и мой взгляд индекс сообщений

<%= link_to 'Show', story_url(post, post.link) %> 
1

Я рекомендую просто делать это вместо GSUB вещи:

def to_param 
    "#{self.id}-#{title.parameterize}" 
end 

Даунсайд является то, что если заголовок изменяется, изменения URL. Что плохо.

Так много реализаций будут делать

before_create :permanize 

def permanize 
    permalink = title.parameterize 
end 

def to_param 
    "#{self.id}-#{permalink}" 
end 
+0

Есть в любом случае сделать это с «/» вместо «-» между Ид и постоянную ссылку? '% 2f% отображает'/'при опрокидывании, но когда вы нажимаете его, изменяется на% 2f и не работает. В Firefox все равно .. –

+0

Нет, не используя to_params. То, что вы захотите, это match ': controller /: id /: link',: controller => 'posts',: action => 'show',: as =>: post_link ...... <% = link_to 'Show', post_link_path (@post,: link => @ post.permaname "%> –

+0

Есть ли способ определить длину с параметризацией? –

Смежные вопросы