基本的には、Account(account_id)でリソースのスコープを設定したいので、アカウントaccount_controllerにcurrent_accountというメソッドとヘルパーを作成しました。Ruby on Rails - マルチテナントアカウントとユーザのアクティブレコードの関連
私は当初、一意の識別子としてサブドメインを使用していましたが、今はサブドメインを使用して削除し、アカウント所有者ユーザーを含むすべてのユーザーにaccount_idで関連付けさせたいと考えています。
問題は私のアカウントコントローラを作成してaccount_idを所有者のユーザに帰属させるための適切な方法を私のAccounts Controllerで見つけることができないことです。私はそれが私がすでに所有者を同時に構築している方法と関係があるかもしれないと思う。アカウント所有者は、新しいユーザーをアカウントに追加/招待する権利があるため、重要です。
誰でも手助けできますか?
背景
- サインアップ最初のユーザーは、アカウントの所有者になります。
- アカウント所有者は、アカウントに他のユーザーを招待できます。
- 私はdevise gemを使用しています。リソースはアカウントごとにスコープされ、アカウントにリンクされているユーザーだけがそのアカウントに属するレコードを参照できるようになります。
アカウントモデル
class Account < ActiveRecord::Base
belongs_to :owner, class_name: "User"
accepts_nested_attributes_for :owner
validates :subdomain, presence: true, uniqueness: true
has_many :users
has_many :contacts
has_many :invitations
end
ユーザーモデル
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :account
end
アカウント・コントローラ
def new
@account = Account.new
@account.build_owner
end
def create
@user = current_user
@account = @user.account.build_user(account_params)
if @account.save
sign_in(@account.owner)
flash[:notice] = "Your account has been created."
redirect_to dashboard_index_path(current_user)
# redirect_to root_url(subdomain: @account.subdomain)
else
flash.now[:alert] = "Sorry, your account could not be created."
render :new
end
end
スキーマ
create_table "accounts", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "owner_id"
t.string "subdomain"
end
add_index "accounts", ["subdomain"], name: "index_accounts_on_subdomain"
create_table "invitations", force: true do |t|
t.string "email"
t.integer "account_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "token"
end
add_index "invitations", ["account_id"], name: "index_invitations_on_account_id"
add_index "invitations", ["token"], name: "index_invitations_on_token"
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "account_id"
end
add_index "users", ["account_id"], name: "index_users_on_account_id"
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true