Rails 3 мультисайт (ассоциация с id)? - PullRequest
1 голос
/ 17 января 2012

Итак, я работаю над новым проектом rails, который предусматривает запуск нескольких веб-сайтов из одной установки rails.Я запутался в том, как сделать ассоциацию, не вкладывая ресурсы.

примечание: я использую субдомены, поэтому URL будет site1.ex.com/photos, site2.ex.com/ramps

Например, теперь у меня есть сайтс именами site 1 и site 1 есть фотографии, видео и рампы.Я могу сделать ассоциацию, рассказав rails site has_many: photos,: videos,: ramps (Код не отформатирован должным образом, просто давая вам идею).Все работает нормально, включая URL, но здесь моя проблема.

  1. сайт включен в URL, что я не хочу (например, example.com/sites/1/photos).
  2. Ассоциация работает нормально, но что, если я хотел бы иметь родителей для 3 предметов?Rails предлагает вам не вкладывать маршруты на глубину более 1 уровняenter image description here

Вот что я хотел бы сделать enter image description here

  1. Как я могу назвать связь между сайтами без использования вложенных ресурсов (Не удается захватитьsite_id с album_id для фотографий)?
  2. Если альбом has_many: photos и own_to: site как я могу назвать это в моем контроллере (любые примеры)?

Я новичок, поэтому я добавил фотографии, чтобы кто-то мог понять, чего я пытаюсь достичь.

1 Ответ

1 голос
/ 17 января 2012

Если вы используете субдомены, вам не нужно использовать вложенные ресурсы для sites. Чтобы найти сайт:

class ApplicationController < ActionController::Base

  before_filter :find_site_by_subdomain

  def find_site_by_subdomain
    @site = Site.find_by_subdomain!(request.subdomain)
  end

end

Для всех других ресурсов вы вкладываете их не под Site, а используете себя в качестве родителя (Альбом / Фотографии, Видео, Рампы). А в вашем AlbumsController вам понадобятся только те, которые принадлежат сайту с текущим поддоменом, поэтому вы используете свой before_filter из ApplicationController и используете объект @site:

class AlbumsController < ApplicationController

  …

  def show
    @album = @site.albums.find(params[:id])
  end

  …
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...