Субдомены в стиле базового лагеря и идентификаторы моделей - PullRequest
0 голосов
/ 12 мая 2010

У меня есть приложение с поддоменами в стиле Basecamp, то есть у меня есть проекты, пользователи, яблоки и апельсины. Пользователи, яблоки и апельсины все привязаны к проекту и существуют только в http://project.myapp.com., который я добавил project_id для пользователей, яблок и апельсинов, и все работает, за исключением того, что идентификаторы этих трех объектов увеличиваются глобально и во всем приложении я ищу объекты по этому идентификатору.

Это не похоже на лучшую практику. Должен ли я вместо этого выполнять поиск по вторичному ключу? Как это влияет на эффективность? Если есть хороший пост в блоге, который освещает это, было бы здорово.

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

В ваших контроллерах просто объедините все в проект, предполагая, что проект has_many :apples:

class ApplesController < ApplicationController
  before_filter :find_apple

  private
    def find_apple
      if current_user.is_admin?
        @apple = Apple.find(params[:id])
      else
        # Scope to the current project/subdomain
        # Note the use of current_project
        # You need to exchange this with whatever you use to get the project object
        @apple = current_project.apples.find(params[:id])

        # Do something here if @apple is nil, like redirect
      end
    end
end
2 голосов
/ 12 мая 2010

Можно иметь глобальный идентификатор (в базе данных). Если возможно, не показывайте эти идентификаторы базы данных, вместо этого используйте дружественные ссылки.

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

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