Rails - FriendlyId и условия - PullRequest
       16

Rails - FriendlyId и условия

0 голосов
/ 29 июля 2011

У меня есть модель сообщений, которая относится к категории (которая использует 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 сделать это.

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

1 Ответ

0 голосов
/ 26 февраля 2012

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
...

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

- добавлена ​​дополнительная информация -

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

...