Module InheritedResources::SingletonHelpers
In: lib/inherited_resources/singleton_helpers.rb

singleton

Singletons are usually used in associations which are related through has_one and belongs_to. You declare those associations like this:

  class ManagersController < InheritedResources::Base
    belongs_to :project, :singleton => true
  end

But in some cases, like an AccountsController, you have a singleton object that is not necessarily associated with another:

  class AccountsController < InheritedResources::Base
    defaults :singleton => true
  end

Besides that, you should overwrite the methods :resource and :build_resource to make it work properly:

  class AccountsController < InheritedResources::Base
    defaults :singleton => true

    protected
      def resource
        @current_user.account
      end

      def build_resource(attributes = {})
        Account.new(attributes)
      end
  end

When you have a singleton controller, the action index is removed.

Methods

Protected Instance methods

Singleton methods does not deal with collections.

Overwrites how singleton deals with resource.

If you are going to overwrite it, you should notice that the end_of_association_chain here is not the same as in default belongs_to.

  class TasksController < InheritedResources::Base
    belongs_to :project
  end

In this case, the association chain would be:

  Project.find(params[:project_id]).tasks

So you would just have to call find(:all) at the end of association chain. And this is what happened.

In singleton controllers:

  class ManagersController < InheritedResources::Base
    belongs_to :project, :singleton => true
  end

The association chain will be:

  Project.find(params[:project_id])

So we have to call manager on it, not find.

[Validate]