想請問關於資料表的規劃
2012-01-02 16:18:09 +0800 由 hechian
在 Ruby on Rails 節點 中發起
最後由 hechian 於2012-01-03 10:08:04 +0800回應
, 271次閱讀
各位新年好,我這邊有個小問題想請教大家一下
(希望不介意我此文也貼在ruby-china那邊)
就是我現在遇到了兩個問題:
1.
我現在有個Model叫做Log,這個Log用來記錄User的操作,譬如說登入、投票等
而Log有欄位:target_type
、target_id
兩個,這個target_type
可能會是"User"
或"Vote"
,而 target_id
就有可能是存放user.id
或者vote.id
了
可是我這樣在取得Log的時候,要怎樣透過log.target
去取得目標物件呢?
可以在Log.rb中belongs_to
設定什麼來做這個Mapping嗎?
2.
我現在另外一個需求是,我得實作一個投票的系統,可以針對不同的產品來分配不同的表供使用者做投票之用,譬如說我有產品叫做:Water跟Cola兩個,這兩個產品會有不同的表:VoteForWater跟VoteForColoa,那我有沒有辦法透過一個Model搭配一個參數(譬如說是vote.for
)來讓Rails自己儲存到對應的表呢?
vote.for = "water"; vote.save #=> 儲存到VoteForWater
vote2.for = "cola"; vote2.save #=> 儲存到VoteForCola
感謝
截至 2012-01-03 10:08:04 +0800,共收到 4 條回應
pobeike
1樓, 於2012-01-02 16:40:31 +0800回應
第一个问题,你可以看看多态关联(Polymorphic Associations)
http://cn.asciicasts.com/episodes/154-polymorphic-association
cqpx
3樓, 於2012-01-02 19:18:09 +0800回應
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 Inheritance
http://api.rubyonrails.org/classes/ActiveRecord/Base.html