这是我所拥有和想要实现的目标:
我有2个模型Category
和Collection
我想要这种关联:
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
或许整个想法都错了,我应该坚持使用无用的专栏?
答案 0 :(得分:0)
Category
属于Collection
,表示Category
模型引用Collection
(collection_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)
验证将确保您无法将多个集合添加到一个类别。