Atributos virtuais no Rails

15 de setembro de 2007  |  Ruby on Rails  | 

Imagine a seguinte situação: Uma tabela users com duas colunas, first_name e last_name.

[source:ruby]
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
[/source]

Mas em minha página de cadastro quero que meu usuário preencha apenas um campo com o nome completo.

[source:html]

Cadastro

<% form_for :user, :url => user_path do |f| %>

Nome Completo:
<%= f.text_field :full_name %>

<% end %>
[/source]

Podemos resolver isto de uma forma muito simples:

[source:ruby]
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
[/source]


5 Comentários


  1. Olá Carlos,

    Ótima dica, tomei a liberdade de fazer uma alteraçãozinha e aumentar a base de codigo do refactoring game.

    http://refactoringgame.railsrumble.com/codes/17

    Abraços

  2. self.first_name, self.last_name = name.split(‘ ‘, 2)

    Taí uma coisa que gosto em Ruby, tem sempre um jeito de deixar o código melhor.

    E mais uma vez parabens pelo projeto Eduardo.

  3. Ae Carlos,

    Tem q dar uma melhorada grande nele, tem aqueles bugs de identação, e várias outras coisinhas que eu já vi.

    Abraços..

  4. Legal, não sabia desse segundo parâmetro do split. Realmente resolve o problema.

Deixe um comentário