Image Image Image Image Image
Scroll to Top

Topo

Model

22

jan
2014

Sem Comentários

Em Blog
Código
Rails
Ruby

Por Mike Lopes

Model em Ruby on Rails – Parte 02

Em 22, jan 2014 | Sem Comentários | Em Blog, Código, Rails, Ruby | Por Mike Lopes

* Por João Paulo

Veja a parte 01

ruby-on-rails

Um model é uma classe que herda da classe ActiveRecord::Base e está associada a uma tabela.

O arquivo do model possui o nome da tabela em minúsculo no singular (“nomedatabela.rb”) e a classe o nome em CamelCase (“class NomeDaTabela”).

É possível criar o model manualmente, porém o Rails possui um generate que cria o model, o migration e a tabela dinamicamente. Funciona no seguinte formato:

rails g model <Model> <Campo1>:tipo <Campo2>:tipo <Campon>:tipo

 ex.: A tabela “produtos”, gerada anteriormente, poderia ser gerada da seguinte forma: será gerada a tabela, o model e a migration pra ela.

rails g model Produto name:string

 Nota: Caso a tabela já tenha sido criada, é necessário adicionar o parâmetro “–force” no generate para reexecutar a migration.

 _mvc

Para acessar um campo pelo controller é necessário criar os métodos que irão ler e escrever o campo, por exemplo, para um campo “nome” ser lido, tem que ser criado o método “nome” e para gravar deverá ser criado o método “nome=”.

class table1 < ActiveRecord::Base

def nome

self[:nome]

end

def nome=(novoNome)

self[:nome] = novoNome

end

end

 

 Nota: É possível usar attr_accessor, attr_reader e attr_writer.

 Para definir um relacionamento no model é necessário chamar o método com o nome do relacionamento (belongs_to, has_one, has_many, …) e o nome na tabela. Esse relacionamento será feito a partir do id. Ex.:

class table1 < ActiveRecord::Base

belongs_to :table2

end

 

relacionará o campo “table2_id” da “table1” com o campo “id” da “table2”.

 Relacionamentos:

  • belongs_to (pertence à): Define que um registro de um model está ligado a um registro de outro model e pertence a ele numa relação “um pra um”, por exemplo, em  uma tabela com reitores e outra com universidades, “um reitor pertence a uma universidade”, assim a tabela “universidade” deverá ter um campo “reitor_id”.
  • has_one (“contém”): Define que um registro model contém outro de outro model numa relação “um pra um” (o contrário de belongs_to), no exemplo do belongs_to, temos que uma “universidade contém um reitor”.
  • has_many (“contém muitos”): Define que um registro de um model contém muitos registros de outro model. Por exemplo, um cliente pode ir a uma loja comprar vários produtos, assim à relação será “cliente contém muitos produtos”, logo a tabela “produtos_vendidos” terá um campo “cliente_id”.
  • has_and_belongs_to_many (“contém e pertence a vários”): Define que vários registros de um model está associado a vários de outro model. Por exemplo, em um sistema de vendas, existe uma tabela “pedidos” que associa vários registros da tabela “produtos” a um da tabela “cliente”, pois um cliente compra vários produtos; porém, também associa vários da tabela “clientes” a um da tabela “produtos”, pois um produto é comprado por vários clientes.

 

Validações:

 Em um model é necessário validar se os dados são válidos antes de salvar no banco de dados, para validar é necessário definir o método no formato:

“validates :<campo>, <validação>”.

 ex.: O campo “nome” da tabela “table1” será obrigatório.

class table1 < ActiveRecord::Base

validates :nome, presence: true

end

Existem vários helpers para validação, como, por exemplo, garantir que apenas números são esperados:

class table1 < ActiveRecord::Base

validates :value, numerically: true

end

Para mais helpers acesse: http://edgeguides.rubyonrails.org/active_record_validations.html#validation-helpers

É possível definir mensagens para caso ocorra um erro na validação, ou seja, para quando um valor passado não estiver de acordo com a validação:

class table1 < ActiveRecord::Base

validates :nome, presence: true, :message => “O nome é obrigatório.”

end

É possível definir a validação para uma determinada ação (create, update, …):

class table1 < ActiveRecord::Base

validates :nome, presence: true, on: :update

end

 

Validações por métodos customizados:

class table1 < ActiveRecord::Base

validate :método, on: :create

 

def metodo

if (campo1 > 10)

erros.add(:value_error, “O número tem que ser maior que 10”)

end

end

 

Informações sobre validações: http://edgeguides.rubyonrails.org/active_record_validations.html#validation-helpers

Documentação completa: http://api.rubyonrails.org/

* João Paulo é estudante de Computação e estagiário da SWX

Tags | , , , ,

21

jan
2014

Sem Comentários

Em Blog
Destaques
Vídeos

Por Mike Lopes

SWX Direto da Trincheira 02 – Framework Chef, Ecommerce, Ruby on Rails e Campus Party

Em 21, jan 2014 | Sem Comentários | Em Blog, Destaques, Vídeos | Por Mike Lopes

No SWX Direto da trincheira 02, trazemos mais novidades do que rola na SWX Softwares. Se você ainda não viu, clique e confira:

Podcast explicando como funciona o framework chef e exemplificado a partir da nossa experiência na SWX.

Neste texto debatemos estratégia de ecommerce a partir da ferramenta adotada, se ela será sua ou alugada a terceiros.

Como utilizar o componente Model da arquitetura MVC? Comece a conhecer um pouco mais de Ruby on Rails na primeira parte deste tutorial.

A SWX foi convidada para a área Startup & Makers da Campus Party, um dos maiores eventos de tecnologia do mundo que tem sua versão brasileira acontecendo em São Paulo de 27 de janeiro a 2 de fevereiro.

Tags | , , , ,

15

jan
2014

Sem Comentários

Em Código
Rails
Ruby

Por Mike Lopes

Model em Ruby on Rails – Parte 01

Em 15, jan 2014 | Sem Comentários | Em Código, Rails, Ruby | Por Mike Lopes

Por João Paulo*
ruby-on-rails

O model é o componente da arquitetura de software MVC que faz a comunicação com o banco de dados (acessar e editar o banco de dados), ou seja, é no model que ficam as regras de negócio. O Rails conta com uma biblioteca para o desenvolvimento dos models de forma rápida, segura e organizada, essa biblioteca é chamada de ActiveRecord. No Rails, o model faz referências a uma tabela no banco, logo se existir um model, existe uma tabela associada a ele (essa é a ideia básica, mas não uma regra, pois é possível ter um model não associado a uma tabela).

É possível criar uma tabela manualmente, porém para alterá-la é necessário alterar manualmente em cada máquina que estiver o projeto, o que torna um processo trabalhoso, então, com o objetivo de  resolver esse problema, o Rails possui o ActiveRecord::Migrations que uma classe do ActiveRecord que define a tabela de forma que cada alteração seja facilmente enviada a todas as máquinas com o projeto. O modelo abaixo é de uma migration (nome dado a classe que herda de ActiveRecord::Migrations) em que é criada uma tabela chamada “produtos” e um campo “nome”:

ActiveRecord

class CreateProductos < ActiveRecord::Migration
	def change
		create table :produtos do |t|
			t.string :nome
		end
	end
end

O método change suporta:

  • add_column

  • add_index

  • add_reference

  • add_timestamps

  • create_table

  • create_join_table

  • drop_table (must supply a block)

  • drop_join_table (must supply a block)

  • remove_timestamps

  • rename_column

  • rename_index

  • remove_reference

  • rename_table

As migrations ficam salvas como: db/migrate/<timestamp>_<migration>.rb.

O comando “rake db:migrate” executa, no console, as migrations que ainda não foram executadas.

Para mais informações sobre migrations: http://guides.rubyonrails.org/migrations.html

É possível gerar, de forma dinâmica, uma migration a partir do console.

Abaixo estão apresentados alguns comandos:

Criar tabela:

rails g migration Create<Tabela> < campo1>:tipo <campo2>:tipo <campon>:tipo

Ex.: será criada uma migration chamada “CreateProducts” com o nome “products”:

rails g migration CreateProducts name:string

Adicionar coluna em uma tabela (depois da tabela ter sido criada):

rails g migration Add<Coluna>To<Tabela> <nome_da_coluna>:tipo

Ex.: será criada uma migration “AddRefToProducts” que acrescentará uma coluna chamada “ref” a tabela “products”:

rails g migration AddRefToProducts ref:string

Nota: é possível usar “rails generate…” ou simplesmente “rails g…”, pois eles são equivalentes.

Para mais informações sobre o rails generate acesse: http://guides.rubyonrails.org/migrations.html#creating-a-migration

* João Paulo é estudante de Computação e estagiário da SWX

Tags | , ,