Re: [問題] 有沒有辦法把資料欄位對映到陣列?

看板Ruby作者 (godfat 真常)時間16年前 (2008/03/21 22:24), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《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

03/21 22:44, , 1F
這位施主都愛用一行搞定QQ
03/21 22:44, 1F

03/21 23:06, , 2F
看習慣的話,這樣其實比較容易理解 :p
03/21 23:06, 2F
文章代碼(AID): #17uyK6du (Ruby)
討論串 (同標題文章)
文章代碼(AID): #17uyK6du (Ruby)