Создавая организацию в пользовательской модели, UNLESS current_user подписан в ..? - PullRequest
1 голос
/ 21 декабря 2011

Как я могу сделать так, чтобы организация создавалась, только если пользователь НЕ вошел в систему?

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

# модели / организации. Rb

class Organization < ActiveRecord::Base
    has_many :users

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

# модели / user.rb

class User < ActiveRecord::Base
    belongs_to :organization
    before_create :create_organization

  private

  def create_organization
    self.organization = Organization.create :name => self.name
  end

Круто, это работает.

Но пользователи также должны иметь возможность зарегистрировать других людей для учетной записи, и этот новый пользователь organization_id должен совпадать с current_user.organization_id

* # controllers / users_controller.rb *

  def create
    @user = User.new(params[:user])
    if current_user
      @user.organization_id = current_user.organization_id
    end
  end

Это решение ограничивает меня, потому что модель создает организацию, даже если пользователь уже вошел в систему. Они работают независимо (если я выберу либо before_filter в модели, либо if current_user в контроллере) , но не вместе.

Мне трудно заставить их работать вместе, потому что вы не можете получить доступ к current_user в пользовательской модели.

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

Если это имеет значение, я использую Authlogic в качестве решения для аутентификации.

Что я могу сделать в пользовательской модели или в пользовательском контроллере для достижения этой цели?

1 Ответ

1 голос
/ 21 декабря 2011

Просто проверьте, присутствует ли organization в before_filter:

def create_organization
  self.organization = Organization.create(:name => self.name) unless self.organization.present?
end

Если пользователь вошел в систему, новый пользователь уже будет связан с организацией, а before_filter не будетсоздать новый.

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