Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Контроллер


Автор: DimanLin 8.2.2009, 15:27
Есть такие методы в контроллере:

def dillers
    @diller_count = Diller.count
    @dillers = Diller.all
  end

  def viewdiller
    
    if params[:id]
      @dillers = Diller.all
      @diller = Diller.find(params[:id])
    else
      redirect_to :action => "dillers"
    end
  end

  def editdiller
    if params[:id]
      @dillers = Diller.all
      @diller = Diller.find(params[:id])
    else
      redirect_to :back
    end
  end

Насамом деле методов гораздо больше, всё что их объеденяет между собой, это лаличие строки "@dillers = Diller.all".
@dillers используется в шаблоне под этот контроллер.

Как можно один раз определить @dillers за пределами метода, и не пихать это определение в каждый метод?

Автор: source777 9.2.2009, 16:52
Код


before_filter :find_dillers, :only => [:dillers, :viewdiller, :editdiller]

  def dillers
    @diller_count = @dillers.count
  end

  def viewdiller
      redirect_to :action => "dillers" unless params[:id]
  end

  def editdiller
      redirect_to(:back) unless params[:id]
  end

private 

def find_dillers
  @dillers = Diller.all
  @diller = Diller.find(params[:id]) if params[:id]
end



P.S. А вообще говоря, тебе не помешает о роутах и о REST почитать, а то URL у тебя абсолютно не в стиле Rails-way.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)