Tag: 数据建模

数据建模3路表has_many关联

我正在尝试构建一个表来处理某个广告系列已使用以下模型关联设置的位置和类别: class Campaign < ActiveRecord::Base has_many :campaign_category_metro_bids, dependent: :destroy has_many :metros, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Metro < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Category < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :metros, through: :campaign_category_metro_bids end class CampaignCategoryMetroBid < ActiveRecord::Base belongs_to :campaign belongs_to […]

Rails建模:将HABTM转换为has_many:through

我正在现有的Rails站点上进行维护工作,并且遇到了来自多对多关联的一些问题。 看起来该站点最初是使用has_and_belongs_to_many为几个关系构建的,这些关系后来在业务逻辑中变得更加复杂,所以我需要使用has_many :through来支持关系表中的其他字段。 但是,最初用于HABTM的连接表没有主键,我必须添加一个以支持使用has_many :through单独的关系建模。 将主键添加到包含大量数据的现有表的最佳方法是什么? 还有另一种方法可以做我想做的事吗? 顺便提一下,系统在Oracle上运行。 谢谢! 贾斯汀 更新11/9/09 3:58 pm:我不是Oracle的专家,并且在Oracle的非空,自动增量等版本中迷失了方向。 最初我尝试通过添加新字段作为主键来执行Mike和Corey所建议的操作,但Oracle不允许我将非空字段添加到非空表(ORA-01758)。 然后我将数据导出为SQL,删除行,添加PK并将其设置为非null,然后尝试导入数据,但我不断收到“无法将NULL插入id …”的错误。 (ORA-01400)。 最后,我尝试使用迁移,正如Corey在他的评论中所建议的那样,但是当我手动更改数据库时,rake遇到了Oracle抛出的相同错误(“无法将非空字段添加到非空表”)。 我清理了表,运行了迁移(工作),然后尝试重新导入数据,但是上次我尝试导入时遇到了相同的错误(“无法将NULL插入id …”)。 如何保存数据并添加我需要的主键? 我知道有可能写一个rake任务,但我不确定如何继续前进。 有任何想法吗?

模型设计:用户有朋友是用户

我想在追求这种关联之前确保我的方法是正确的。 实施听起来太复杂了,所以我认为我的计划肯定有问题。 我正在使用结构化(SQL)数据存储,符合rails存储约定。 我所拥有的是用户模型,它在Schema中有一个电子邮件地址, password_digest和名称。 class User < ActiveRecord::Base has_many :posts end 我想对一个朋友集合实现一个has_many关联,这样用户就可以belong_to用户(作为朋友)。 我希望能够让User.last.friends.last在正确构建和填充时返回User对象。 我相信我可以为这个协会创建一个模型,如: Class Friend < ActiveRecord::Base belongs_to :user belongs_to :friendlies, class: 'User' end Class User < ActiveRecord::Base has_many :posts has_many :friends has_many :friendly, class: 'Friend' end 但我认为这将要求我使用User.last.friends.last.user添加模型和查询。所以我在想的是这是一个has_and_belongs_to_many关系。 我可以逃脱以下(或类似的东西): class User < ActiveRecord::Base has_and_belongs_to_many :friends, class: 'User' end 我发现了这个 : class User < […]