0

私がやろうとしているのは、Project一度に 1 つのプロジェクトしかアクティブにできない のモデルを考え出すことです。そこで、 用にテーブルを 1 つ、 用projectsにもう 1 つ作成することを考えていますstatus

特定の時間にアクティブなプロジェクトが 1 つだけであることを確認するにはどうすればよいですか? 私は調べましvalidates_uniqueness_of たが、1 つのプロジェクトが既に有効になっているにもかかわらず、現在のステータスをオーバーライドできるようにしたいので、それが私にとっての解決策であるかどうかは少し混乱しています。

4

1 に答える 1

0

属性Projectのようなものが必要:activeです。Project次に、このような検証をモデルに追加できます

validate :ensure_only_one_active_project

def ensure_only_one_active_project
  active_project = Project.where(active: true).first

  errors.add(:active, "Another project is already active. Only one project can be active at a time") unless active_project.nil? || active_project.id == self.id
end

ここで、がProjectすでにアクティブで、別の(現在は非アクティブ) Project @projectがある場合は、

@project.active = true
@project.valid? # this will return false

@project.errors:active以来、上記のエラーを持つ属性を持つハッシュが含まれます

  • 1Projectはすでにアクティブです
  • アクティブなプロジェクトは、現在保存しているプロジェクトではありません。Project
于 2013-02-02T05:09:15.977 に答える