Дизайн моделей и контроллеров в рельсах для удобного URL

Еще один вопрос от новичка в рельсах. Я использую гем friendly_id с mysql в rails 3.x

Это проблема дизайна (может быть легко в рельсах). Жду советов от специалистов по рельсам. Я создаю приложение для списка библиотек. Где пользователь может просматривать библиотеку по «агломерации» или по «городу». Например:

Я хочу иметь такие URL-адреса, как:

www.list.com/library/san-francisco-bay-area

or

www.list.com/library/san-francisco-bay-area/palo-alto/

В базе данных у меня есть таблицы:

library
-------
id, name, city_id, slug

здесь указано имя, а city_id - FK

city
----
city_id, name, metro_area_id, slug

здесь указано имя, а metro_area_id - FK

metro_area 
----------
metro_area_id, name, state, slug

здесь залито имя

Поэтому, когда пользователь указывает браузеру на www.list.com/library/san-francisco-bay-area/palo-alto

Я хочу получить список библиотек в области залива Сан-Франциско/Пало-Альто. Но моя модель библиотечной таблицы содержит слаг только для имени библиотеки. Итак, как можно проанализировать этот URL-адрес, чтобы найти city_id, который можно использовать в модели библиотеки и контроллере для получения списка.

Пожалуйста, помните, я не могу полагаться только на название города. Мне нужно было бы найти city_id «пало-альто», который находится в метро «san-francisco-bay-area». Так как slug для metro_area и city находится в других таблицах, как лучше спроектировать модель и контроллер.

Показать метод контроллера:

def show
    @user = Library.find(params[:id])

    respond_to do |format|
       format.html # show.html.erb
       format.json { render json: @library }
    end
end

и модель

class Library < ActiveRecord::Base
  attr_accessible :name, :city_id, :slug
  extend FriendlyId
  friendly_id :name, use: :slugged
end

Это не будет работать в соответствии с моим требованием к дружественному URL. Так что буду признателен за советы знатоков :)


person JVK    schedule 25.08.2012    source источник


Ответы (1)


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

Поскольку вы хотите отобразить слаги из двух разных моделей. Я предполагаю, что способ отображения идентификаторов будет примерно таким

www.list.com/libraries/:id/cities/:id/metro_areas/:id

Это можно сделать, отредактировав файл маршрута, добавив вложенные ресурсы.

Что касается просто отображения двух идентификаторов, таких как

www.list.com/library/:city_id/:metro_area_id

В руководстве по Rails это называется Динамические сегменты.

После этого нужно просто преобразовать идентификаторы в слаги.

Я также нашел это в документации FriendlyId, которая относится к ваш случай.

Надеюсь, поможет

person Firyn    schedule 01.01.2013