0

我有类似的东西:

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

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

由于单个Droplet可以属于多个Buckets (真正的问题有点复杂),是否有实现类似于以下内容的“rails-way”:

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

这样人们就可以访问Bucket#droplets数组中每个元素的位置Droplet

4

1 回答 1

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
于 2013-01-19T22:38:19.917 回答