我有一个类似的东西:
class Bucket < ActiveRecord::Base
serialize :droplets, Array #of IDs
end
class Droplet < ActiveRecord::Base
#...
end
由于单个Droplet
可以属于多个Bucket
(真正的问题有点复杂),是否存在实现类似以下内容的"铁路":
#in some action
@bucket = Bucket.find(47)
@droplets = Droplet.find_all_by_id(@bucket.droplets)
,这样就可以访问Bucket#droplets
,其中数组的每个元素都将是Droplet
?
听起来你想要多对多的关系。建议使用3个表。如果你不想这样做,你必须在sql中保留数组,在这种情况下,你将失去一些rails的功能,不得不做你自己描述的
@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