about ruby on rails...

5: Использование with_scope

In asciicasts-ru on Декабрь 6, 2009 at 17:54

Узнайте, как использовать with_scope — мощный метод, который позволит определить пользовательские методы поиска с применением различных опций.

Оригинальный Railscast
Оригинальный Asciicast

В этом эпизоде речь пойдет о методе with_scope. Ниже приведен код модели Task, в которой определен метод класса, возвращающий незавершенные задачи.

class Task < ActiveRecord::Base  
  belongs_to :project  
  
  def self.find_incomplete  
    find_all_by_complete(false, :order => 'created_at DESC')  
  end  
end

Этот метод используется в TasksController.

class TasksController < ApplicationController  
  def index  
    @tasks = Task.find_incomplete  
  end

У такого подхода есть некоторые ограничения, например мы не можем добавить условие, чтобы найти скажем первые 20 незавершенных задач:

@tasks = Task.find_incomplete :limit => 20

Необходимая функциональность легко и элегантно достигается с помощью with_scope:

class Task < ActiveRecord::Base  
  belongs_to :project  
  
  def self.find_incomplete(options = {})  
    with_scope :find => options do  
      find_all_by_complete(false, :order => 'created_at DESC')  
    end  
  end  
end

Теперь find_incomplete может принимать любые условия и параметры, в том числе и при работе с ассоциациями:

@tasks = @project.tasks.find_incomplete :limit => 20
Реклама
  1. Приветище!

    ___123___5: Использование with_scope | Railslog’s Blog___123___

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s

%d такие блоггеры, как: