Notas sobre Ruby e Rails.

records.md 3.1KB

Records

Cada entrada de um objeto salvo no banco de dados é um record. É possivel criar records nos controladores, modelos ou atravez do Rails Console.

Criar

Para criar um novo objeto baseado em um modelo:

user = User.new

O objeto é criado, mas ele ainda não foi salvo no banco de dados. Para ver o estado do objeto:

user.new_record? - Retorna true se o objeto ainda não foi salvo.

Para modificar parametros de um objeto:

user.first_name = "James"

Depois para salvar o objeto:

user.save

Também é possivel criar um objeto, configurar seus parametros e salva-lo em um unico comando:

user = User.new(:first_name => "James", :last_name => "Peret")

Modificar

Para achar uma entrada de um objeto atravez de seu ID:

user = User.find(1)

Depois um metodo para modificar parametros de um objeto em um unico comando:

user.update_attributes(:first_name => "Gabriel")

Deletar

Para deletar um objeto no banco de dados, primeiro ache o objeto e depois execute o comando:

user.destroy

Esse comando apenas remove o objeto do banco de dados, mas ele continua carregado na memoria.

user.frozen? - Retorna true se o objeto foi apagado do banco de dados.

Busca Simples

  • Busca por ID primario, retorna o objeto ou um erro:

    Page.find(2)

  • Busca dinamica, retorna o objeto ou NIL:

    Page.find_by_id(2)

    Page.find_by_title("About Us")

  • Achar todos os objetos:

    Page.all

  • Achar o primeiro ou ultimo objetos no banco de dados:

    Page.first

    Page.last

Busca com ActiveRelation

Buscas utilizando ActiveRelation são apenas executadas quando necessario, diferente das buscas simples onde são executadas imediatamente. Outro detalhe é que as buscas com ActiveRelation normalmente retornam um array.

Essas buscas utilizam o metodo where(condition), por exemplo:

Page.where(:author => "James Peret")

Essa busca retorna um Active Relation object, que pode ser linkado a outras buscas e consições:

Page.where(:author => "James Peret").order("id ASC")

O objeto com a busca é da classe ActiveRecord::Relation, para ver isso:

page_query.class

Para ver a busca que vai ser gerada em SQL:

page_query.to_sql

Para iniciar uma busca com todos os objetos:

pages = Page.scoped

Tipos de expressões de condições

  • String: metodo mais simples para passar condições para uma busca. Porem cuidado com SQL Injection!

    author = 'James Peret' AND status='published'

  • Array: utilizado para previnir SQL Injection.

    ["author = ? AND status = published", "James Peret"]

  • Hash: seguro de SQL Injection, mas limitado (não pode usar LIKE e outras expressões).

    {:author => "James Peret", :status => "published"}

order, limit, offset

  • order(sql_fragment)
    • formato: table_name.column_name + ASC ou DESC
    • É possivel combinar mais de uma ordem, separadas por virgula.
  • limit(integer)
  • offset(integer)

Exemplo: Page.order("id ASC").limit(10).offset(30)

voltar