tableless_model
Ruby on Rails model sem banco de dados, com todo o poder do ActiveRecord e validações.
A principal utilidade é usar em formulários que não precisam de banco de dados, mas precisam das validações do ActiveRecord, form_for e rotas RESTful. Por exemplo formulário de contato.
Instalação
./script/plugin install git://github.com/patrickespake/tableless_model.git
Geradores
Gerador tableless_model
Cria o esboço de um novo tableless model. Passe o nome do tableless model, em CamelCased ou under_scored, e uma lista de pares de atributos opcionais como argumentos.
Os atributos pares opcionais são column_name:sql_type como argumentos, especificando os atributos do tableless model.
Você não tem que pensar em cada atributos lá na frente, mas ajuda a esboçar um pouco para que você possa começar a trabalhar com o tableless model imediatamente.
Isto gera uma classe tableless model em app/models, um teste de unidade em test/unit e uma fixture em test/fixtures/singular_name.yml
Exemplos:
./script/generate tableless_model contact
Cria o tableless model Contact, test e fixture:
- Model: app/models/contact.rb
- Test: test/unit/contact_test.rb
- Fixtures: test/fixtures/contacts.yml
./script/generate tableless_model invite name:string body:text email:string
Cria o tableless model Invite com a string name, text body e string email.
Gerador tableless_scaffold
Tableless scaffolds é composto por vários recursos, a partir do model, controller e views, juntamente com um conjunto completo de testes. O recurso está pronto para ser usado como um ponto de partida, sendo RESTful, orientado para o pedido.
Passe o nome do tableless model (na forma singular), em CamelCased ou under_scored, como primeiro argumento, e uma lista de pares de atributos opcionais.
Os pares de atributos opcionais são column_name:sql_type, especificando os atributos do modelo.
Você não tem que pensar em cada atributo lá na frente, mas ajuda esboçar um pouco para que você possa começar a trabalhar com os recursos imediatamente.
Por exemplo ‘tableless_scaffold contact name:string telephone:string firm:string email:string message:text’ dá-lhe um tableless model com cinco atributos, um controlador para lidar com a criação, formulário para criar os contatos e routas declaradas em config/routes.rb.
Se você quiser remover todos os arquivos gerados, execute:
script/destroy scaffold ModelName
Exemplos:
./script/generate tableless_scaffold invite
./script/generate tableless_scaffold contact name:string telephone:string firm:string email:string message:text
Tipos de colunas disponíveis nos tableless_models
1
2
3
4
5
6
7
| class ModelName < TablelessModel
column :column_name1, :column_type
column :column_name2, :column_type
column :column_name3, :column_type
column :column_nameN, :column_type
...
end |
Tipos de colunas (column_type) disponíveis:
- :string
- :text
- :integer
- :float
- :decimal
- :datetime
- :timestamp
- :time
- :date
- :binary
- :boolean
Validações do ActiveRecord funcionam perfeitamente
1
2
3
4
5
6
7
8
9
10
11
| class Contact < TablelessModel
column :name, :string
column :telephone, :string
column :firm, :string
column :email, :string
column :message, :text
validates_presence_of :name, :email, :message
validates_format_of :email, :with => /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
validates_length_of :message, :minimum => 3
end |
Exemplo completo usando tableless_scaffold gerador
Criar o tableless scaffold
./script/generate tableless_scaffold contact name:string telephone:string firm:string email:string message:text
Adicionar as validações no model
Abra o arquivo app/models/contact.rb e adicione as validações:
1
2
3
4
5
6
7
8
9
10
11
12
| class Contact < TablelessModel
column :name, :string
column :telephone, :string
column :firm, :string
column :email, :string
column :message, :text
# Validations
validates_presence_of :name, :email, :message
validates_format_of :email, :with => /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
validates_length_of :message, :minimum => 3
end |
Execute
Abra o seu navegador em: http://localhost:3000/contacts/new
Exemplo completo usando tableless_model gerador
Criar tableless model
./script/generate tableless_model contact name:string telephone:string firm:string email:string message:text
Adicionar as validações no model
Abra o arquivo app/models/contact.rb e adicione as validações:
1
2
3
4
5
6
7
8
9
10
11
12
| class Contact < TablelessModel
column :name, :string
column :telephone, :string
column :firm, :string
column :email, :string
column :message, :text
# Validations
validates_presence_of :name, :email, :message
validates_format_of :email, :with => /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
validates_length_of :message, :minimum => 3
end |
Criar o controlador
./script/generate controller contacts new create
Adicionar os códigos das actions:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class ContactController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.save # or @contact.valid?
flash[:notice] = "Contact email sent successfully."
# Send contact email
#MyMailer.deliver_contact(@contact)
redirect_to new_contact_path
else
render :action => "new"
end
end
end |
Criar as routas para os contacts
Abra o arquivo config/routes.rb e adicione a linha:
1
2
3
4
| ActionController::Routing::Routes.draw do |map|
map.resources :contacts, :only => [:new, :create]
...
end |
Criar o formulário de contato
Abra o arquivo app/views/contacts/new.html.erb e adicione o conteúdo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <% form_for(@contact) do |f| %>
<%= f.error_messages %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :telephone %>
<%= f.text_field :telephone %>
<%= f.label :firm %>
<%= f.text_field :firm %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :message %>
<%= f.text_area :message %>
<%= f.submit "Send" %>
<% end %> |
Apague o arquivo app/views/contacts/create.html.erb.
Execute
Abra o seu navegador em: http://localhost:3000/contacts/new
Documentação
http://lab.patrickespake.com/tableless_model
Código fonte
http://github.com/patrickespake/tableless_model
Se você gostou desse texto e acha que ajudou você, me recomende:
.