如何才能创建组织,以便仅在用户未登录时才创建组织?
这有点模糊,所以让我说清楚一点。我有两张桌子;一个组织表和另一个用户表。组织拥有许多用户,用户属于某个组织。
#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_filter
或if current_user
在控制器中),但不是在一起。
由于您无法访问用户模型中的current_user,因此我很难让它们协同工作。
我将organization_id作为注册链接中的参数,但这不是很安全,因为这意味着任何用户都可以简单地更改URL中的organization_id并自动将帐户转到另一个不属于的组织它们。
如果重要,我使用Authlogic作为我的身份验证解决方案。
我可以在用户模型或用户控制器中执行此操作吗?
答案 0 :(得分:1)
只需检查organization
中是否存在before_filter
:
def create_organization
self.organization = Organization.create(:name => self.name) unless self.organization.present?
end
如果用户已登录,则新用户已与某个组织关联,before_filter
将不会创建新用户。