Search code examples
ruby-on-railsinherited-resources

Retrieve created object from InheritedResources#create


In my Rails app, I have the following objects:

Group: has_many users through group_membership
GroupMembership: belongs_to user, belongs_to group
User: has_many groups through group_membership

Users can create groups. When this happens, I want to automatically add the user to the group. In my GroupsController, I have the following (extending InheritedResources):

super do |success, failure|
  if success
    GroupMembership.create(:user_id => current_user, :group_id => ???)
  ...
end

The problem is I cannot retrieve the object that super created. Is there a way to do this? Or better, is there a way to change the LockGroup model so that it always performs this association?


Solution

  • When the callback is fired, the controller already has the standard instance variable corresponding to the created group: @group !!

    class GroupController < InheritedResources::Base
    
      def create
        super do |success, failure|
          if success
            GroupMembership.create(:user_id => current_user, :group_id => @group.id)
          ...
        end
      end
    
    end