我的应用程序中有用户创建的组。我很困惑如何设置创建组作为所有者的用户。我希望能够成为多个所有者,所以这是一个“有很多通过”的关系。我可以创建/编辑/删除一个组。
所以我的问题是如何在创建组时将当前的user_id和group_id插入group_owners表中?
到目前为止,这是我的工作:
用户模型
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
我假设需要在用户组创建方法中进行某些操作,但我不确定是什么。
感谢您提供的任何帮助。
答案 0 :(得分:0)
您应该创建像
这样的用户组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在组所有者表中创建用户组。
答案 1 :(得分:0)
在您的UserGroup模型中,为所有者设置一个布尔值。
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
答案 2 :(得分:0)
用户组控制器创建方法的以下更改修复了我的问题。
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