Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:确保两个表是;同步';d";_Ruby On Rails_Rails Activerecord - Fatal编程技术网

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种方法。并不是说这是最好的方法,但这肯定是非常普遍和容易的。