Fix STI+polymorphic for Group <-> GroupMember
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
13af7de941
commit
1aa48174db
|
@ -1,4 +1,4 @@
|
||||||
class GroupMembersController < ApplicationController
|
class Groups::GroupMembersController < ApplicationController
|
||||||
before_filter :group
|
before_filter :group
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
|
@ -43,6 +43,6 @@ class GroupMembersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_params
|
def member_params
|
||||||
params.require(:users_group).permit(:access_level, :user_id)
|
params.require(:group_member).permit(:access_level, :user_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -69,6 +69,6 @@ class Projects::TeamMembersController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_params
|
def member_params
|
||||||
params.require(:team_member).permit(:user_id, :access_level)
|
params.require(:project_member).permit(:user_id, :access_level)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
class GroupMember < Member
|
class GroupMember < Member
|
||||||
SOURCE_TYPE = 'Group'
|
SOURCE_TYPE = 'Namespace'
|
||||||
|
|
||||||
belongs_to :group, class_name: 'Group', foreign_key: 'source_id'
|
belongs_to :group, class_name: 'Group', foreign_key: 'source_id'
|
||||||
|
|
||||||
# Make sure group member points only to group as it source
|
# Make sure group member points only to group as it source
|
||||||
default_value_for :source_type, SOURCE_TYPE
|
default_value_for :source_type, SOURCE_TYPE
|
||||||
validates_format_of :source_type, with: /\AGroup\z/
|
default_value_for :notification_level, Notification::N_GLOBAL
|
||||||
|
validates_format_of :source_type, with: /\ANamespace\z/
|
||||||
default_scope { where(source_type: SOURCE_TYPE) }
|
default_scope { where(source_type: SOURCE_TYPE) }
|
||||||
|
|
||||||
scope :with_group, ->(group) { where(source_id: group.id) }
|
scope :with_group, ->(group) { where(source_id: group.id) }
|
||||||
|
|
|
@ -5,8 +5,10 @@ class ProjectMember < Member
|
||||||
|
|
||||||
belongs_to :project, class_name: 'Project', foreign_key: 'source_id'
|
belongs_to :project, class_name: 'Project', foreign_key: 'source_id'
|
||||||
|
|
||||||
|
|
||||||
# Make sure project member points only to project as it source
|
# Make sure project member points only to project as it source
|
||||||
default_value_for :source_type, SOURCE_TYPE
|
default_value_for :source_type, SOURCE_TYPE
|
||||||
|
default_value_for :notification_level, Notification::N_GLOBAL
|
||||||
validates_format_of :source_type, with: /\AProject\z/
|
validates_format_of :source_type, with: /\AProject\z/
|
||||||
default_scope { where(source_type: SOURCE_TYPE) }
|
default_scope { where(source_type: SOURCE_TYPE) }
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
= link_to leave_profile_group_path(@group), data: { confirm: leave_group_message(@group.name)}, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
|
= link_to leave_profile_group_path(@group), data: { confirm: leave_group_message(@group.name)}, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
|
||||||
%i.icon-minus.icon-white
|
%i.icon-minus.icon-white
|
||||||
- else
|
- else
|
||||||
= link_to group_users_group_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
|
= link_to group_group_member_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
|
||||||
%i.icon-minus.icon-white
|
%i.icon-minus.icon-white
|
||||||
|
|
||||||
.edit-member.hide.js-toggle-content
|
.edit-member.hide.js-toggle-content
|
|
@ -32,7 +32,7 @@
|
||||||
(#{@members.total_count})
|
(#{@members.total_count})
|
||||||
%ul.well-list
|
%ul.well-list
|
||||||
- @members.each do |member|
|
- @members.each do |member|
|
||||||
= render 'group_members/users_group', member: member, show_roles: show_roles, show_controls: true
|
= render 'groups/group_members/group_member', member: member, show_roles: show_roles, show_controls: true
|
||||||
= paginate @members, theme: 'gitlab'
|
= paginate @members, theme: 'gitlab'
|
||||||
|
|
||||||
:coffeescript
|
:coffeescript
|
||||||
|
|
|
@ -161,9 +161,8 @@ Gitlab::Application.routes.draw do
|
||||||
get :projects
|
get :projects
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :users_groups, only: [:create, :update, :destroy]
|
|
||||||
|
|
||||||
scope module: :groups do
|
scope module: :groups do
|
||||||
|
resources :group_members, only: [:create, :update, :destroy]
|
||||||
resource :avatar, only: [:destroy]
|
resource :avatar, only: [:destroy]
|
||||||
resources :milestones
|
resources :milestones
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class MigrateToNewMembersModel < ActiveRecord::Migration
|
class MigrateToNewMembersModel < ActiveRecord::Migration
|
||||||
def up
|
def up
|
||||||
execute "INSERT INTO members ( user_id, source_id, source_type, access_level, notification_level, type ) SELECT user_id, group_id, 'Group', group_access, notification_level, 'GroupMember' FROM users_groups"
|
execute "INSERT INTO members ( user_id, source_id, source_type, access_level, notification_level, type ) SELECT user_id, group_id, 'Namespace', group_access, notification_level, 'GroupMember' FROM users_groups"
|
||||||
execute "INSERT INTO members ( user_id, source_id, source_type, access_level, notification_level, type ) SELECT user_id, project_id, 'Project', project_access, notification_level, 'ProjectMember' FROM users_projects"
|
execute "INSERT INTO members ( user_id, source_id, source_type, access_level, notification_level, type ) SELECT user_id, project_id, 'Project', project_access, notification_level, 'ProjectMember' FROM users_projects"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue