是否可以使用序列化属性进行关联?

时间:2013-01-19 00:35:34

标签: ruby-on-rails ruby-on-rails-3

我有类似的东西:

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

1 个答案:

答案 0 :(得分:1)

听起来你想要多对多的关系。 建议使用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