Atributos virtuais no Rails

Carlos Brando
Nome do Jogo
Published in
1 min readSep 15, 2007

Imagine uma situação onde você tenha uma tabela chamada users que possua duas colunas first_name e last_name para armazenar de forma separada o nome e sobrenome do usuário.

class CreateUsers < ActiveRecord::Migration 
def self.up
create_table :users do |t|
t.column :first_name, :string
t.column :last_name, :string
end
end

def self.down
drop_table :users
end
end

Agora digamos que no formulário de cadastro você deseje que o usuário preencha apenas um campo com o nome completo, como vemos baixo:

Cadastro<% form_for :user, :url => user_path do |f| %>
Nome Completo: <%= f.text_field :full_name %>
<% end %>

Isso pode ser resolvido de uma forma muito simples usando atributos virtuais:

class User < ActiveRecord::Base 
def full_name
[first_name, last_name].join(‘ ‘)
end
def full_name=(name)
split = name.split(‘ ‘, 2)
self.first_name = split.first
self.last_name = split.last
end
end

Originally published at nomedojogo.com on September 15, 2007.

--

--

Carlos Brando
Nome do Jogo

Programmer, CTO at @enjoei, Author of two books about Ruby on Rails, and Host of the @grokpodcast.