homeASCIIcasts

2: Métodos dinámicos de find_by 

(view original Railscast)

Other translations: En It Fr Kr Pl Pt

Other formats:

Written by Aldo Escudero (aldoescudero.com.ar)

Esta es una forma muy útil de hacer un find en Rails. Debajo, vemos un modelo Task que busca tareas que no han sido completadas. (ej.: la columna complete es false).

class TaskController < ApplicationController  
  def incomplete  
    @tasks = Task.find(:all, :conditions => ['complete = ?', false])  
  end  
  
  def last_incomplete   
    @task = Task.find(:first, :conditions => ['complete =?', false], :order => 'created_at DESC')  
  end  
end 

Hay una mejor forma de obtener esto y es haciendo find_by_all. Solamente tendremos que reemplazar

@tasks = Task.find(:all, :conditions => ['complete = ?', false]) 

por

@tasks = Task.find_all_by_complete(false)

Si solo se quiere encontrar un Task, entonces usamos find_by; por lo que para encontrar la última tarea incompleta, la siguiente línea

@task = Task.find(:first, :conditions => ['complete =?', false], :order => 'created_at DESC')  

quedaría como

@task = Task.find_by_complete(false, :order => 'created_at DESC')  

El método find_by toma el parámetro order, igual que como lo hace el método find.