建模为可以添加其他用户模型的组
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
我在尝试实现以下目标时遇到了问题,主要是在控制器部分:
我有一个用户模型和一个公司模型。 用户可以创建公司,这意味着该用户将成为公司所有者。此外,该用户可以添加其他用户加入公司。
到目前为止,我的模型如下:
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