0

В основном я хочу обладать ресурсами по счету (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 

ответ

0

У меня есть аналогичные приложения. Заменить учетную запись для организации. Вот мои модели/контроллеры ...

organization.rb

class Organization < ApplicationRecord 
    has_many :users 
    has_many :tasks, through: :users 
end 

user.rb

class User < ApplicationRecord 
    belongs_to :organization 
    has_many :tasks, dependent: :destroy 
    accepts_nested_attributes_for :organization 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    def self.get_users(current_org) 
    current_org.users 
    end 
end 

Вместо создания организации (счета) в контроллере, как это выглядит, как вы я делаю это, когда пользователь подписывается. Когда новый пользователь подписывается, они вводят название организации. Есть мнения/изобрести/регистрация/новый вид

<h2>Sign up</h2> 
<% resource.organization ||= Organization.new %> 
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </div> 

    <div class="field"> 
    <%= f.label :password %> 
    <% if @minimum_password_length %> 
    <em>(<%= @minimum_password_length %> characters minimum)</em> 
    <% end %><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
    </div> 

    <%= f.fields_for :organization do |org| %> 
    <div><%= 'Organization or Company Name' %><br /> 
    <%= org.text_field :name %></div> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit "Sign up" %> 
    </div> 
<% end %> 

<%= render "devise/shared/links" %> 

Это первый пользователь, который подпишется устанавливается как пользователь администратора для организации и имеет доступ к панели управления пользователя, который позволяет для создания других пользователей внутри организации ,

Ниже приведен рабочий пример приложения вместе с readme.PDF в корневой папке:

https://github.com/marklocklear/devise_multitenant_rails5

Надеется, что это помогает!

Смежные вопросы