Ff7afae5b23125e25e18ad8c0404bd78

想請問關於資料表的規劃

2012-01-02 16:18:09 +0800hechianRuby on Rails 節點 中發起
最後由 hechian2012-01-03 10:08:04 +0800回應 , 271次閱讀

各位新年好,我這邊有個小問題想請教大家一下
(希望不介意我此文也貼在ruby-china那邊)

就是我現在遇到了兩個問題:

1.
我現在有個Model叫做Log,這個Log用來記錄User的操作,譬如說登入、投票等
而Log有欄位:target_typetarget_id兩個,這個target_type可能會是"User""Vote",而 target_id就有可能是存放user.id或者vote.id
可是我這樣在取得Log的時候,要怎樣透過log.target去取得目標物件呢?
可以在Log.rb中belongs_to設定什麼來做這個Mapping嗎?

2.
我現在另外一個需求是,我得實作一個投票的系統,可以針對不同的產品來分配不同的表供使用者做投票之用,譬如說我有產品叫做:Water跟Cola兩個,這兩個產品會有不同的表:VoteForWaterVoteForColoa,那我有沒有辦法透過一個Model搭配一個參數(譬如說是vote.for)來讓Rails自己儲存到對應的表呢?

vote.for = "water"; vote.save #=> 儲存到VoteForWater
vote2.for = "cola"; vote2.save #=> 儲存到VoteForCola

感謝

截至 2012-01-03 10:08:04 +0800,共收到 4 條回應
B25df49ad3ddf0cc833eb93ebeda285c
pobeike 1樓, 於2012-01-02 16:40:31 +0800回應

第一个问题,你可以看看多态关联(Polymorphic Associations)
http://cn.asciicasts.com/episodes/154-polymorphic-association

Ff7afae5b23125e25e18ad8c0404bd78
hechian 2樓, 於2012-01-02 17:22:28 +0800回應

#1樓 @pobeike 感謝,我再試試 ...
第二個好像真的太麻煩了T^T"

C6c57c07843274735d6f5dc451a203ee
cqpx 3樓, 於2012-01-02 19:18:09 +0800回應

#2樓 @hechian 第二个用STI,

class Vote
class Vote::Water < Vote
class Vote::Cola < Vote

vote1 = Vote::Water.new
vote1.save #=> 存到Vote表,type自動設置為"Vote::Water"
vote2 = Vote::Cola.new
vote2.save  #=> 存到Vote表,type自動設置為"Vote::Cola"

搜索Single Table Inheritancehttp://api.rubyonrails.org/classes/ActiveRecord/Base.html

Ff7afae5b23125e25e18ad8c0404bd78
hechian 4樓, 於2012-01-03 10:08:04 +0800回應

#3樓 @cqpx 多謝,我試試看 ...

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊