Rails 用户组 - 在另一个模型中设置组所有者
Rails User Groups - Set Group Owner In Another Model
我的应用程序中有用户创建的组。我对如何将创建组的用户设置为所有者感到困惑。我希望那里能够有多个所有者,所以这是一个 'has-many-through' 关系。我可以create/edit/delete一组。
所以我的问题是如何在创建群组时将当前 user_id 和 group_id 插入 group_owners table?
以下是我目前有效的方法:
用户模型
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :group_owners
has_many :user_groups, through: :group_owners
end
群模型
class UserGroup < ActiveRecord::Base
has_many :goup_owners
has_many :users, through: :groups_owners
validates :name, presence: true, length: {minimum: 5}
validates :visibility, presence: true, length: {minimum: 5}
VISIBILITY_TYPES = ["Public", "Private"]
end
群主模式
class GroupOwner < ActiveRecord::Base
belongs_to :user
belongs_to :user_group
end
用户组控制器 - 创建操作
def create
@usergroup = UserGroup.new(usergroup_params)
if @usergroup.save
redirect_to user_groups_path
else
render 'new'
end
end
我假设用户组创建方法需要一些东西,但我不确定是什么。
感谢您提供的任何帮助。
您应该像
那样创建用户组
def create
@usergroup = current_user.user_groups.build(usergroup_params)
if @usergroup.save
redirect_to user_groups_path
else
render 'new'
end
end
这样,将使用当前用户 ID 创建用户组,并将组 ID 添加到组所有者 table。
在您的用户组模型中,为所有者设置一个布尔值。
create_table |t|
t.references :user
t.references :group
t.boolean :owner
end
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :owner
scope :groups, ->(*g) {where(group_id: g.flatten.compact.uniq)}
scope :users, ->(*u) { where(user_id: u.flatten.compact.uniq)}
scope :owners, ->{where owner:true}
end
class User < ActiveRecord::Base
has_many :user_groups, dependent: :destroy, inverse_of: user
has_many :groups, through: :user_groups
def owned_groups
groups.merge(UserGroup.owners)
end
end
对用户组控制器创建方法的以下更改解决了我的问题。
def create
@user_group = current_user.user_groups.build(usergroup_params)
if @user_group.save
@user_group.users << current_user
redirect_to user_groups_path
else
render 'new'
end
end
我的应用程序中有用户创建的组。我对如何将创建组的用户设置为所有者感到困惑。我希望那里能够有多个所有者,所以这是一个 'has-many-through' 关系。我可以create/edit/delete一组。
所以我的问题是如何在创建群组时将当前 user_id 和 group_id 插入 group_owners table?
以下是我目前有效的方法:
用户模型
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :group_owners
has_many :user_groups, through: :group_owners
end
群模型
class UserGroup < ActiveRecord::Base
has_many :goup_owners
has_many :users, through: :groups_owners
validates :name, presence: true, length: {minimum: 5}
validates :visibility, presence: true, length: {minimum: 5}
VISIBILITY_TYPES = ["Public", "Private"]
end
群主模式
class GroupOwner < ActiveRecord::Base
belongs_to :user
belongs_to :user_group
end
用户组控制器 - 创建操作
def create
@usergroup = UserGroup.new(usergroup_params)
if @usergroup.save
redirect_to user_groups_path
else
render 'new'
end
end
我假设用户组创建方法需要一些东西,但我不确定是什么。
感谢您提供的任何帮助。
您应该像
那样创建用户组def create
@usergroup = current_user.user_groups.build(usergroup_params)
if @usergroup.save
redirect_to user_groups_path
else
render 'new'
end
end
这样,将使用当前用户 ID 创建用户组,并将组 ID 添加到组所有者 table。
在您的用户组模型中,为所有者设置一个布尔值。
create_table |t|
t.references :user
t.references :group
t.boolean :owner
end
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :owner
scope :groups, ->(*g) {where(group_id: g.flatten.compact.uniq)}
scope :users, ->(*u) { where(user_id: u.flatten.compact.uniq)}
scope :owners, ->{where owner:true}
end
class User < ActiveRecord::Base
has_many :user_groups, dependent: :destroy, inverse_of: user
has_many :groups, through: :user_groups
def owned_groups
groups.merge(UserGroup.owners)
end
end
对用户组控制器创建方法的以下更改解决了我的问题。
def create
@user_group = current_user.user_groups.build(usergroup_params)
if @user_group.save
@user_group.users << current_user
redirect_to user_groups_path
else
render 'new'
end
end