"属于"并且"有很多"通过?

时间:2015-10-06 18:27:05

标签: ruby-on-rails ruby-on-rails-4 associations model-associations

这是我所拥有和想要实现的目标:

我有2个模型CategoryCollection

我想要这种关联:

Category属于Collection

Collection有很多Category

但我只需要几个记录就需要这种关联。像100。 所以我没有看到任何理由为其余的100 000条记录创建参考列。

我试了这个没有运气:

class Category
  has_many :category_collection

  # This is not a valid option
  belongs_to :collection, through: :category_collection

  # And this will throw
  has_one :collection, through: :category_collection

  # ActiveRecord::HasOneThroughCantAssociateThroughCollection: Cannot have
  # a has_one :through association 'Category#collection'
  # where the :through association 'Category#category_collection' is
  # a collection. Specify a has_one or belongs_to association 
  # in the :through option instead.
end

class Collection
  has_many :category_collection
  has_many :categories, through: :category_collection
end

class CategoryCollection
  self.table_name = 'categories_collections'
  belongs_to :category
  belongs_to :collection
end

或许整个想法都错了,我应该坚持使用无用的专栏?

2 个答案:

答案 0 :(得分:0)

Category属于Collection,表示Category模型引用Collectioncollection_id字段)。如果没有99k无用的记录,你就无法做到。

但可以改为定义has_one关联。

class Category
  has_one :category_collection 
  has_one :collection, through: :category_collection
end

答案 1 :(得分:0)

好的,我会说这有点脏,但你可以这样设置它。如果这完全是疯了,请告诉我。

    declare @query nvarchar(max), @crlf nvarchar(2), @columnName nvarchar(50)
    set @query=''
    set @crlf=char(13)

    /*Set the name you are searchng*/
    set @columnName='%tag%'


    SELECT @query=@query + 'select '''+name+''' as ''Datadase'', t.name as ''Table'', c.name as ''Column'' 
from ['+name+'].sys.tables t 
inner join ['++name+'].sys.columns c on t.object_id=c.object_id     
where c.name like '''+ @columnName +''' union all'+ @crlf +char(13) 
FROM master.dbo.sysdatabases

    set @query=left(@query,len(@query)-len(' union all'+ @crlf))
    exec (@query)

验证将确保您无法将多个集合添加到一个类别。