Filtro do controlador para recursos aninhados e não aninhados

Se você precisa de algo assim em seu aplicativo Rails:

resources :users do
resources
:posts
end

resources
:posts

Você pode manter seu PostsController DRY com este filtro simples:

before_filter :load_user

def load_user
@user = User.find(params[:user_id]) if params[:user_id]
@posts = @user ? @user.posts : Post.scoped
end

Então você pode reescrever suas ações CRUD como:

def new
@post = @posts.build
end

def create
@post = @posts.build(params[:post])
end

def show
@post = @posts.find(params[:id])
end

def edit
@post = @posts.find(params[:id])
end

def update
@post = @posts.find(params[:id])
end

def destroy
@post = @posts.find(params[:id])
end

Fonte: Stackoverflow