Общий шаблон рефакторинга для модели Rails - PullRequest
0 голосов
/ 12 октября 2010

Существует ли шаблон для преобразования такой конструкции в читаемую строку?

def show_section
  @news = News.all_active
  @news = @news.where(:section => params[:section]) unless params[:section] == "all"
  @news = @news.all
end

Я использую Rails 3 и Ruby 1.9.2

Ответы [ 2 ]

3 голосов
/ 12 октября 2010
@news = News.all_active.where(params[:section] == "all" ? nil : {:section => params[:section]})

Вы можете избавиться от @news.all - в Rails 3 запрос будет выполняться при использовании результирующего объекта ActiveRecord::Relation (например, когда вы вызываете each или first).Передача метода nil в where ничего не даст.

Если all_active является методом, вы можете реорганизовать его в область и затем вызвать его в цепочке.

Большие ресурсына Rails 3 запроса:

1 голос
/ 12 октября 2010

Вы можете превратить предложение where в метод вашей модели новостей:

class News
  def self.for_section(section)
      where(section == "all" ? nil : {:section => section})
  end
end

Затем в вашем контроллере вы можете связать все это вместе так:

News.for_section(params[:section]).all_active

Это, конечно, предполагает, что all_active также является областью, а не набором результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...