0

私は2つのモデルを持っています

class Department < ActiveRecord::Base
  has_many :checklists
  attr_accessible :deadline
  after_update :update_checklist

class Checklist < ActiveRecord::Base
  belongs_to :department
  attr_accessible :content, :category

基本的に「部署」モデルは「締め切り」という仮想属性を持っており、日付型になっています。'deadline' の実際の値は、別のモデルの 'checklist' に文字列の形式で格納されます。

「締め切り」が更新されるたびに、「チェックリスト」にエントリがあるかどうかを確認し、作成 (まだの場合) または更新 (既にエントリがある場合) を行いたいと考えています。

こんな風に考えていました

def deadline=(deadline)
  @cl = Checklist.find_or_create_by_department_id_and_category(self.id, 'deadline')
  @cl.update_attributes(:content => deadline.to_s)
  @cl.save
end

def deadline
  @deadline = self.checklists.find_by_category('deadline')
  Date.parse(@deadline.to_s)
end

しかし、上記の仮想属性は機能していません。答えを探していると、レールキャストでコールバックがこの種の状況のより良い解決策になることがわかりました。だから私は次のようなことをしようとしています:

class Department < ActiveRecord::Base
  after_update :update_checklist

def update_checklist
  @cl = Checklist.find_or_create_by_department_id_and_category(self.id, 'deadline')
  @cl.update_attributes(:content => ???)
end

値をコールバックに渡す方法がわかりません。

このデザインで私を助けてください。これを処理する標準的な方法は何ですか?前もって感謝します!

4

1 に答える 1

0

update_checklist は Department のメソッドです。したがって、 update_checklist 内では、 が必要な場合と同様に、任意の部門属性にアクセスできself.idますself.deadline

于 2012-10-17T06:22:36.487 に答える