Rails — FriendlyId и условия

У меня есть модель постов, которая принадлежит категории (в которой используется friendly_id). Теперь я хочу перечислить все сообщения в категории. Чтобы получить индексную страницу, я хочу использовать ссылку типа: http://mysite/posts/category/_category_slug_, для этого я сделал следующий маршрут:

match 'posts/category/:category/' => 'posts#index'

И в моем почтовом контроллере я получил:

def index
  if params[:category]
    @posts = Post.all(:joins => :category, :conditions => {"categories.cached_slug" => params[:category]})
  else
    @posts = Post.all.reverse
  end
...

Он работает так, как должен, но я не думаю, что это friedndly_id способ сделать это.

Есть ли лучший способ добиться этого? Спасибо за вашу помощь.


person Marcus    schedule 29.07.2011    source источник


Ответы (1)


FriendlyId добавляет возможность поиска модели с помощью слага и достаточно умен, чтобы сначала проверить столбец cached_slug.

Вы можете добиться того же результата, сначала выполнив поиск в модели категории, а затем получив все сообщения.

Это предполагает наличие ассоциации has_many и own_to со столбцами ссылающихся идентификаторов (или HABTM).

def index
  if params[:category]
    @posts = Category.find(params[:category]).posts
  else
    @posts = Post.all.reverse
  end
...

Поскольку вы передаете параметр категории (дружественный_ид), имеет смысл ссылаться на него через модель категории.

-- добавлено больше информации --

ТАКЖЕ: Исторические находки по-прежнему будут работать. Итак, если вы сгенерировали новый ярлык, переименовав категорию, старый URL-адрес будет вести себя правильно (отлично, если вы избегаете ошибок 404).

person Matenia Rossides    schedule 26.02.2012