在模型添加虛擬屬性

原文地址:[url]http://rails-bestpractices.com/posts/4-add-model-virtual-attribute[/url]

先上一段代碼,估計一般看到下面的代碼,都會認為自己肯定不會這樣寫,但事實上,我們經常寫了不少這樣的代碼....以前不覺得咋樣,但回頭看看,覺得很可笑...(據說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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值