2013-01-19 64 views
0

我有一些與此類似:由於單個Droplet是否可以使用序列化屬性進行關聯?

class Bucket < ActiveRecord::Base 
    serialize :droplets, Array #of IDs 
end 

class Droplet < ActiveRecord::Base 
    #... 
end 

可以屬於多個Bucket S(真正的問題是一個比較複雜的),有沒有實現類似的東西的「軌通」以下內容:

#in some action 
@bucket = Bucket.find(47) 
@droplets = Droplet.find_all_by_id(@bucket.droplets) 

使得一個可以訪問Bucket#droplets,其中陣列中的每個元素將是一個Droplet

+0

不能你只需要添加一個實例方法'droplets'到'Bucket'返回'self.class.find_all_by_id(水滴) '? –

+0

如果你將它設置正確,用has_many和a屬於模型,你可以通過Bucket.find(47).droplets獲得一個桶的所有水滴。如果你想我可以在回答中輸入更多的代碼 –

+0

@ rik.vanmechelen這不是說'Droplet'只能'belongs_to'單個'Bucket'嗎?我能想到的唯一可能的解決方案是使用第三個表來跟蹤所有關聯(我寧願不這樣做)。 – omninonsense

回答

1

這聽起來像你想要一個多對多的關係。 真的建議用3張桌子做這個。 如果你不想這樣,你必須保持在SQL中的數組,在這種情況下,你會失去一些軌道的功能,如果你想在做必須做它,你與

@bucket = Bucket.find(47) 
@droplets = Droplet.find_all_by_id(@bucket.droplets) 

描述自己更清潔的方式做:

class Bucket < ActiveRecord::Base 
    has_and_belongs_to_many :droplets 
end 

class Droplet < ActiveRecord::Base 
    has_and_belongs_to_many :buckets 
end 

你將需要遷移:

# in migration 
def change 
    create_table 'buckets_droplets', :id => false do |t| 
    t.column :bucket_id, :integer 
    t.column :droplet_id, :integer 
    end 
end 
相關問題