Помощь в маршрутизации Rails - PullRequest
1 голос
/ 18 августа 2010

Я хочу, чтобы URL сообщения пользователя был таким:

example.com / / имя-пост пользователей имя пользователя /

Как мне это настроить?

В настоящее время модель сообщения содержит:

def to_param
    name.parameterize
end 

(для переноса названия сообщения соответственно)

rout.rb содержит:

  map.resources :users
  map.resources :posts

Предпочтительно, я хотел бы сказать post_path (post), и это сгенерирует мне подходящий путь, найдя post.user автоматически.

Что мне нужно сделать, чтобы это произошло?

Также добавлено

map.resources :users do |user|
    user.resources :posts
end

Ответы [ 3 ]

1 голос
/ 18 августа 2010

Привет, чтобы приложение распознало маршруты типа

.
example.com/users/username/post-name

Вы должны добавить в ваши маршруты.rb

 map.connect 'users/:username/:post', :controller => "users", :action => "test"

Тогда вы можете получить доступ к params[:username] и params[:post] внутри ваших контроллеров. test action. Вы должны определить его после map.resources :users, но до map ':controller/:action/:id', но вы должны написать свой собственный помощник, затем

1 голос
/ 18 августа 2010

Еще один способ:

map.resources :users do |user|
  user.connect ':name/:action', :controller => 'posts', :defaults => {:action => 'show'}
end 

Доступные маршруты:
example.com/users/username/post-name
example.com/users/username/post-name/edit (любое действие)

0 голосов
/ 18 августа 2010

Это to_param выглядит нормально, но встроенные помощники не ссылаются на вложенные ресурсы так, как вы хотите, вам придется использовать user_post_path(user, post)Конечно, вы можете написать свой собственный вспомогательный метод post_path, который работает так, как вы хотите.

def post_path(post)
  url_for [post.user, post]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...