2011-12-21 1 views
1

ユーザーがサインインしていない場合にのみ組織を作成できるようにするにはどうすればよいですか?ユーザーモデルで組織を作成するには、current_userがサインインされていない限り..?

これは少し曖昧ですので、少しわかりやすくしてください。私は2つのテーブルを持っています。 1つの組織テーブル、および別のユーザーテーブル。組織は多くのユーザーを持ち、ユーザーは組織に属します。

#モデル/ organizations.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

と同じでなければなりません* #コントローラ/ 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にアクセスできないため、一緒に動作させるのが難しいです。

私はsignupリンクのパラメータとしてparamaterを指定しましたが、それは誰でも簡単にURLのorganization_idを変更して、自動的に所属していない別の組織彼らへ。

重要な場合は、認証ソリューションとしてAuthlogicを使用しています。

これを達成するためにユーザーモデルまたはユーザーコントローラでできることはありますか?

答えて

1

ちょうどorganizationbefore_filterに存在しているかどうかを確認:ユーザーがログインしている場合

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

を、新しいユーザーが既に組織に関連付けされ、before_filterは、新しいものを作成しません。

+0

イエス、あなたはそれがとても難しいと思います。私はよく見落とすこれらの単純な解決策に驚いています。 D'oh !!多くの多くの多くの多くの感謝@mischa – cdotfeli

+0

あなたは大歓迎です! – Mischa

関連する問題