В основном я хочу обладать ресурсами по счету (account_id), поэтому я создал метод и помощник, называемый current_account, в моем аккаунте base_controller.Ruby on Rails - активные ассоциации записей для многопользовательской учетной записи и пользователя
Первоначально я использовал субдомен как уникальный идентификатор, но теперь я хочу отказаться от использования субдомена, и каждый пользователь, включая пользователя моего владельца учетной записи, должен быть связан account_id.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу определить правильный метод в моем контроллере учетных записей для создания учетной записи и атрибута account_id для пользователя-владельца. Я думаю, что это может быть связано с тем, что я уже создаю Владельца в то же время. Владелец учетной записи имеет важное значение, поскольку у них есть права добавлять/приглашать новых пользователей в учетную запись.
Может ли кто-нибудь помочь?
фон
- Первый пользователь, который подписывает становится владельцем счета.
- Владельцы учетных записей могут приглашать других пользователей в учетную запись.
- Я использую драгоценный камень. Ресурсы ограничены учетной записью, поэтому только пользователи, связанные с учетной записью, могут видеть записи, принадлежащие этой учетной записи.
счета Модель
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