Ruby on rails Rails:确保两个表是;同步';d";
关系:Ruby on rails Rails:确保两个表是;同步';d";,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,关系: 团队有许多名册 团队有许多公告 公告有一个公告名册 创建公告时,用户必须为其分配花名册(其数据将用于创建新的公告花名册) 我的模型: class User < ActiveRecord::Base has_many :roster_players has_many :rosters, -> { uniq } , :through => :roster_players has_many :announcement_rosters, -> { u
有许多团队
名册
有许多团队
公告
有一个公告
公告名册
公告
时,用户必须为其分配花名册
(其数据将用于创建新的公告花名册
)
我的模型:
class User < ActiveRecord::Base
has_many :roster_players
has_many :rosters, -> { uniq } , :through => :roster_players
has_many :announcement_rosters, -> { uniq } , :through => :announcement_players
end
class Roster < ActiveRecord::Base
has_many :roster_players
has_many :users, -> { uniq }, through: :roster_players
end
class RosterPlayer < ActiveRecord::Base
belongs_to :roster
belongs_to :user
validates :user_id, :uniqueness => { :scope => :roster_id }
end
class Announcement < ActiveRecord::Base
has_one :announcement_roster
end
class AnnouncementRoster < ActiveRecord::Base
has_many :announcement_players
has_many :users, -> { uniq }, through: :announcement_players
end
class AnnouncementPlayer < ActiveRecord::Base
belongs_to :announcement
belongs_to :user
end
class用户{uniq},:通过=>:花名册球员
有很多:公告名单,>{uniq},:通过=>:announcement\u球员
结束
类花名册{uniq},通过::花名册\玩家
结束
类RosterPlayer{:scope=>:花名册\u id}
结束
类公告{uniq},通过::公告\u玩家
结束
class AnnouncementPlayer
我相信我需要不同的关系模型(RosterPlayer
,AnnouncementPlayer
,TaskPlayer
,等等),因为不同的关系需要不同的属性。例如:播音员有一个read?
列,TaskPlayer有一个progress
列,排班员有一个captain?
列
问题:
确保
announcementfloster
与从中复制的花名册“同步”的最佳方法是什么?换句话说,如果复制的花名册的
数据发生更改(用户被添加或删除),则相应的公告花名册
应相应更新 您需要在以下策略之间做出选择:
使用数据库级习惯用法级联这些更新(以不可见的方式发送到rails)
保存后使用,\u更新后使用,让Rails推送更改
在Rails中创建非自动方法(rake任务),将更新推送到cron上
使用bash和cron中的SQL脚本推送更改(或者类似地,由鸽子发送更改)
您选择哪一项取决于您的环境、应用程序指标、恢复能力等
抱歉,这是一个概述答案。其他人可能会从正反两方面讨论这个问题,并根据尚未说明的信息帮助您做出决定。典型的rails应用程序将使用第2种方法。并不是说这是最好的方法,但这肯定是非常普遍和容易的。