2012-04-12 52 views
0

我有一個用戶可以選擇多個複選框的名稱複選框的集合。從複選框的收藏中存儲用戶偏好

我想保存下次登錄時的用戶選擇。

但是,隨着時間的推移,一些名稱可能會被刪除,而新的可能會被添加。新增名稱可以保持未選中狀態,但我不想保留存儲已刪除名稱的ID。

那麼我應該怎麼做呢?

回答

0

我會爲您的選項表,然後有記錄勾選的選項

然後你就可以添加一個連接表:依賴=>:破壞對期權方面的關係。當選項被移除時,這將刪除連接表中的記錄。

這是一個很多的例子很多:

def User < ActiveRecord::Base 
    has_many :preferences, :dependent=>:destroy 
    has_many :options, :through=>:preferences 
end 

def Preferences < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :option 
end 

def Option < ActiveRecord::Base 
    has_many :preferences, :dependent=>:destroy 
    has_many :users, :through=>:preferences 
end 

如果需要,你可以創建多個連接表,對於不同類型的選項。說背景顏色,你需要一個連接,允許你也將顏色存儲在關聯中,或者可能需要爲頁面上的文章存儲整數,這可能是另一種模式。或者,您可以添加單個字符串值來加入表並將關聯數據存儲爲字符串,並僅使用該字符串。

+0

這是一個很好的建議,但是這不需要一張新表格來存儲這個偏好?我期待有一個表格來存儲所有的喜好,但它似乎是一個新的表格,各種喜好可以加起來,但也許這只是它的方式。 – 99miles 2012-04-12 05:31:05

+0

不,你有一個表,每個首選項作爲記錄,然後是從用戶到首選項的連接表。您可以通過向首選項表中添加一行來添加新的首選項,以將新首選項標記爲對於向表中添加記錄的用戶處於活動狀態。 – 2012-04-12 13:10:18

+0

如果我的表存儲許多首選項,但其中一個(或多個)首選項是has_many,那麼這是如何工作的?比方說,我正在存儲最初提到的名稱集合,以及用戶選擇的background_color。 如果某些偏好是一對多的,該表格和連接將如何查看? ID, ACCOUNT_ID, BACKGROUND_COLOR, names_selection(但可以有許多這些名字的選擇,而不僅僅是一個),所以我不知道你是如何建議的one_to_many做法將在這裏工作) – 99miles 2012-04-15 05:01:23