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 ModelNameExemplos:
./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
./script/server
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
./script/server
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:
.




















