在用户模型中创建组织,UNLESS current_user已登录..?

时间:2011-12-21 09:17:30

标签: ruby-on-rails

如何才能创建组织,以便仅在用户未登录时才创建组织?

这有点模糊,所以让我说清楚一点。我有两张桌子;一个组织表和另一个用户表。组织拥有许多用户,用户属于某个组织。

#models / organizations.rb

class Organization < ActiveRecord::Base
    has_many :users

我这样做是为了当用户注册时,会创建一个组织及其帐户。

#models / 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

相同

* #conversors / users_controller.rb *

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

此解决方案限制了我,因为即使用户已登录,模型也会创建组织。他们独立工作(如果我取出模型中的before_filterif current_user在控制器中),但不是在一起。

由于您无法访问用户模型中的current_user,因此我很难让它们协同工作。

我将organization_id作为注册链接中的参数,但这不是很安全,因为这意味着任何用户都可以简单地更改URL中的organization_id并自动将帐户转到另一个不属于的组织它们。

如果重要,我使用Authlogic作为我的身份验证解决方案。

我可以在用户模型或用户控制器中执行此操作吗?

1 个答案:

答案 0 :(得分:1)

只需检查organization中是否存在before_filter

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

如果用户已登录,则新用户已与某个组织关联,before_filter将不会创建新用户。