Ruby on Rails будет разбивать маршруты - PullRequest
0 голосов
/ 22 октября 2010

Я пытаюсь настроить маршруты для плагина will paginate, чтобы у меня не было? Page = 1 в конце URL, и поэтому я могу позже попытаться использовать кэширование страниц.

Я просматривал онлайн и нашел несколько руководств, объясняющих использование map.connect, однако у меня возникли проблемы с его работой с моим приложением.

Вот пример URL: http://localhost:3000/profile/1/browse?page=1

Вот код маршрута, который я получил до сих пор:

map.connect '/profile/:id/browse/:page', 
:controller => 'profiles',
:action => 'browse',
:id => /\d+/,
:page => /\d+/

Это не работает. У кого-нибудь есть совет?

Я думал, что map.connect - это сопоставление с образцом, но, возможно, я что-то упустил.

Спасибо,

1 Ответ

0 голосов
/ 22 октября 2010

Глядя на свой маршрут, вы можете пересекать две разные вещи.Что ты делаешь?Если это профили, нет необходимости указывать идентификатор.Предположим, вы пытаетесь разбить профили на страницы.Ваш маршрут будет выглядеть так:

map.connect '/profiles/browse/:page', 
  :controller => 'profiles',
  :action => 'index',
  :page => /\d+/

А действие вашего контроллера будет выглядеть так:

def index
  @profiles = Profile.paginate :page => params[:page]
end

Если вы пытаетесь вложить что-то в профили, скажем, просматривая изображения профиля,вам нужно будет сделать это примерно так:

map.connect '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'index',
  :id => /\d+/,
  :page => /\d+/

с вашим контроллером примерно так:

def index
  @profile = Profile.find(params[:id])
  @pictures = @profile.pictures.paginate :page => params[:page]
end

Дайте мне знать, если это работает.

ОБНОВЛЕНИЕ:

Вы указали в комментариях, что /profile/1/ относится к собственному профилю пользователя.Во-первых, это опасно, потому что вы не хотите, чтобы люди меняли профиль своего приложения, просто изменяя этот идентификатор вручную.Положитесь на любой метод current_user, который дает вам ваша аутентификация.

Однако, используя вашу текущую настройку в качестве примера, это будет выглядеть так:

map.connect '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'browse',
  :id => /\d+/,
  :page => /\d+/

с вашим контроллером следующим образом:

def browse
  @profile = Profile.find(params[:id])
  @profiles = Profile.paginate :page => params[:page]
end

Дайте мне знать, если у вас все еще есть вопросы.

ОБНОВЛЕНИЕ 2

Чтобы получить хороший link_to с этим, измените маршрут на именованный маршрут:

map.profile_browse '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'browse',
  :id => /\d+/,
  :page => /\d+/

Теперь вы можете позвонить link_to следующим образом:

link_to profile_browse_path(:id => 1, :page => 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...