私は簡単な作業スケジュールのレールアプリを持っています。スケジュール内のジョブは、ジョブの優先度によって順序付けられます。いくつかのジョブは優先順位が変わる可能性があり、同じ性質で、それらを完了する必要があるので、2つのジョブが同じ優先順位を共有しないように、残りのテーブルの優先順位と優先順位を更新できる必要があります。優先度が更新されたら、優先度のリストが連続していること、つまり優先度が1,2,3,4,5などと表示されるようにします。 1,2,4,5,6,8などのようなギャップを持つ代わりに。Before_validation:継続性の更新とメンテナンス
これを達成するための適切なコーディングがわかりましたか?
これは、私は現在、私のモデルに持っているものです。
class Job < ActiveRecord::Base
include ActiveModel::Dirty
belongs_to :customer
has_many :job_items
before_validation :update_priorities
validates :priority, :uniqueness => true
private
def update_priorities
if self.priority_changed?
self.class.where("priority >= ?", self.priority).update_all("priority = priority + 1")
else
nil
end
end
上記のコードは、そのブランドの新しい仕事であれば優先順位は罰金が更新されます。しかし、いったん現在のジョブの順序を変更し始めると、ギャップがシーケンスに現れ始めます。
私は現在、自動的にこの種のものを行いますRailsの3.2.1
それはあるかもしれません。コードとコメントのコードで使用する例を見ると、私はジョブをラップするためにマスタークラスが必要なようです。それが本当なら、それは私のために働かないだろう。 –
私はあなたが範囲を提供しないことによってラッピングクラスなしでそれを使うことができると思います。したがって、モデル内で '' acts_as_list:column => 'priority''を呼び出すだけで、範囲を必要とせずにacts_as_listのすべての魔法を提供することができます。 – Veraticus
私は間違っているかもしれませんが、マスタークラスが必要だと思います。マスタークラスを参照せずに残りのジョブを調整する方法はわかりません。 –