Одним из решений может быть использование фильтра до на вашем контроллере, например:
before_filter :load_user
def load_user
@user = User.find(params[:user_id]) if params[:user_id]
@posts = @user ? @user.posts : Post.scoped
end
Затем вам нужно немного переписать контроллер, чтобы он функционировал должным образом.
Не требуется рефакторинг для действия index
, @posts
уже загружен правильно, но вы можете выполнять дальнейшую фильтрацию по своему усмотрению
def index
@posts = @posts.where('updated_at < ?' Time.now)
end
Затем обновите каждое действие члена: новое, создать, показать, редактировать, обновить, уничтожить и использовать сообщения в качестве базы, например:
def new
@post = @posts.build
end
def create
@post = @posts.build(params[:task])
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
Конечно, вы можете добавить другие фильтры перед удалением дубликата кода.