原文地址:[url]http://rails-bestpractices.com/posts/4-add-model-virtual-attribute[/url]
先上一段代碼,估計一般看到下面的代碼,都會認為自己肯定不會這樣寫,但事實上,我們經常寫了不少這樣的代碼....以前不覺得咋樣,但回頭看看,覺得很可笑...(據說Ruby是高智商行業,本人智力不夠,先積點經驗先...)
上面代碼有什么問題呢?
其實也能運行的,但問題是讓人看了覺得不舒服..
如:
(1)這里可以看出我們要存儲的是first_name和last_name,但因為要使用full_name,不得不把代碼寫的鬼斧神工..
(2).first和.last這樣使用有點別扭..
來看看別人的方法吧...其實就是虛擬屬性憋.
貌似順眼點了...上主菜:[img]/images/guest_book/8.gif[/img]
先上一段代碼,估計一般看到下面的代碼,都會認為自己肯定不會這樣寫,但事實上,我們經常寫了不少這樣的代碼....以前不覺得咋樣,但回頭看看,覺得很可笑...(據說Ruby是高智商行業,本人智力不夠,先積點經驗先...)
<% form_for @user do |f| %>
<%= text_field_tag :full_name %>
<% end %>
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
@user.first_name = params([:full_name]).split(' ', 2).first
@user.last_name = params([:full_name]).split(' ', 2).last
@user.save
end
end
上面代碼有什么問題呢?
其實也能運行的,但問題是讓人看了覺得不舒服..
如:
(1)這里可以看出我們要存儲的是first_name和last_name,但因為要使用full_name,不得不把代碼寫的鬼斧神工..
(2).first和.last這樣使用有點別扭..
來看看別人的方法吧...其實就是虛擬屬性憋.
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
<% form_for @user do |f| %>
<%= f.text_field :full_name %>
<% end %>
class UsersController < ApplicationController
def create
@user = User.create(params[:user])
end
end
貌似順眼點了...上主菜:[img]/images/guest_book/8.gif[/img]