作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 有没有办法把资料栏位对映到阵列?
时间Fri Mar 21 22:24:03 2008
※ 引述《shelary (喵小咩)》之铭言:
: 例如在 SQL 里是
: id INT(11)
: user1 VARCHAR(200)
: user2 VARCHAR(200)
: user3 VARCHAR(200)
: user4 VARCHAR(200)
: created_at DATETIME
: 用 Ruby 读进 car 後 user 的部份可以变成阵列
: car.id
: car.user[0]
: car.user[1]
: car.user[2]
: car.user[3]
: car.created_at
我没试过,也不是很确定 rails 能不能这样做,不过看个感觉?
class Car < ActiveRecord::Base
attr_reader :user
def initialize
@user = []
create_user_array
end
private
def create_user_array
4.times{ |i| @user << send("user#{i+1}".to_sym) }
end
end
上面可能有问题的部份:
initialize 可以这样做吗?是否有 after_find 之类的 hook?
如果不行也没有的话,可能就要自己呼叫 create_user_array,
然後可以改写成:
def create_user_array
return if @user
@user = []
4.times{ |i| @user << send("user#{i+1}".to_sym) }
end
另外几个想法:
4 可否不要写死?
欠缺 map_with_index, 也欠缺 tap, 否则可以更简洁
前者 facets 有,後者 1.9 有
map_with_index:
def create_user_array
@user ||= Array.new(4).map_with_index{ |c,i| send("user#{i+1}".to_sym) }
end
tap:
def create_user_array
@user ||= Array.new(4).tap{ |a| 4.times{ |i| send("user#{i+1}".to_sym) } }
end
--
「行け!Loki!」
(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18
1F:推 janyfor:这位施主都爱用一行搞定QQ 03/21 22:44
2F:→ godfat:看习惯的话,这样其实比较容易理解 :p 03/21 23:06