建模为可以添加其他用户模型的组

Model as a group that can add other User models

我在尝试实现以下目标时遇到了问题,主要是在控制器部分:

我有一个用户模型和一个公司模型。 用户可以创建公司,这意味着该用户将成为公司所有者。此外,该用户可以添加其他用户加入公司。

到目前为止,我的模型如下:

class Firm< ActiveRecord::Base        
    has_many :users, dependent: :destroy    
end

class User < ActiveRecord::Base
  ...         
  belongs_to :bufete  
end

这是我在公司控制器中的创建操作:

def create
       @bufete = Bufete.create(bufete_params)
       @user = current_user
       @bufete.users.create(@user)     # Mark that this user belongs to a bufete
       @user.owner = true               # Mark this user as the owner of the Bufete

        respond_to do |format|
            if @bufete.save && @user.save
                format.html { redirect_to @bufete, :flash => { :success => 'Tu bufete ha sido creado exitosamente.' } }
                format.json { render :show, status: :created, location: @bufete }
            else
                format.html { render 'new', :flash => { :danger => 'Hubo un error al tratar de crear tu bufete. 
                Porfavor asegurese de que el correo electronico es una direccion valida' } }
                format.json { render json: @bufete.errors, status: :unprocessable_entity }
            end
        end 
    end

Schema.rb 文件:

ActiveRecord::Schema.define(version: 20150730061404) do

  create_table "bufetes", force: :cascade do |t|
    t.string   "name"
    t.string   "address"
    t.string   "telephone"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
    t.text     "description"
    t.string   "code"
  end

  create_table "users", force: :cascade 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",                             null: false
    t.datetime "updated_at",                             null: false
    t.boolean  "admin",                  default: false
    t.boolean  "premium",                default: false
    t.integer  "bufete_id"
    t.string   "name"
    t.string   "last_name"
    t.boolean  "owner",                  default: false
  end

  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

end

我相信我的联想是正确的,但我可能是错的。我的主要问题是在控制器中。当用户创建公司时,如何将此用户指定为该公司的所有者?同时如何将此用户添加到Firm.userscollection?

此外,我将如何将未来用户添加到特定公司的用户中 collection?

重要提示:一个用户只能创建一个公司。同时,一个用户也只能属于一个公司。如果用户创建公司,它将属于该公司。

我假设 Bufete 等于 Firm 模型,在下面的代码中我将使用 Bufete 而不是 Firm。您可以在创建Bufete记录之前检查用户是否可以创建新的Bufete。

def create
   @user = current_user
   if @user.can_create_bufete?
     @bufete = Bufete.create(bufete_params)

     # assign user to @bufete instead of @bufete.users.create()
     @user.bufete = @bufete  
     @user.owner = true

     # add your response_to block for @user.saved

   else

     # add your response_to block of not creating new Bufete

   end

end

然后您将检查用户是否可以在您的用户模型中创建 Bufete 对象。

def can_create_bufete?
  !owner && !bufete.present? # or any condition that meets your requirement
end