代码之家  ›  专栏  ›  技术社区  ›  Rich Coy

Rails用户组-在另一个模型中设置组所有者

  •  0
  • Rich Coy  · 技术社区  · 9 年前

    我的应用程序中有用户创建的组。我对如何将创建组的用户设置为所有者感到困惑。我希望那里能够有多个所有者,所以这是一种“有很多贯穿”的关系。我可以创建/编辑/删除组。

    所以我的问题是,在创建组时,如何将当前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
    

    我假设在用户组创建方法中需要一些东西,但我不确定是什么。

    感谢您提供的任何帮助。

    3 回复  |  直到 9 年前
        1
  •  0
  •   Masudul    9 年前

    您应该像这样创建UserGroup

    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创建用户组。

        2
  •  0
  •   ilan berci    9 年前

    在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
    
        3
  •  0
  •   Rich Coy    9 年前

    对用户组控制器创建方法的以下更改修复了我的问题。

    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