1

したがって、次のモデルと関連付けを使用してアプリを作成しています。

class Company < ActiveRecord::Base
  has_many :customers, :dependent => :destroy
  has_many :goals, :dependent => :destroy
end

class Customer < ActiveRecord::Base
  belongs_to :company
  has_many :tasks
  has_many :goals, through: :tasks
end

class Goal < ActiveRecord::Base
  has_many :tasks, :dependent => :destroy
  belongs_to :company
  has_many :customers, through: :tasks
end

class Task < ActiveRecord::Base
  belongs_to :goal
  belongs_to :customer
end

ビューで、新しいタスクの form_for には既に選択された目標または顧客があり、他の関連付けの選択は、他のモデルに基づいてフィルター処理されたセットです。理論的には、ユーザーが 2 つの異なる会社 (@task.goal.company == @task.customer.company) の下でタスクを作成することは不可能です。

しかし、祖父母が 1 人しかいないことを確認するための検証を行うことは良い習慣のようです。特定の基準が満たされているかどうかを検証できる Proc.new を使用することは理解していますが、常に検証したいので、これは私が探しているソリューションではありません。

ありがとう。

ところで、モデル構造がばかげているように見えるかどうか、またはレールの慣習に対して明らかに何かをしたかどうかを教えてください。

4

1 に答える 1

0

proc.new とメソッドは、検証に関してはまったく同じです。そうは言っても、おそらく次のようなものを探しているでしょう:

class Task < ActiveRecord::Base
  belongs_to :goal
  belongs_to :customer

  validate :companies_match

  private

  def companies_match
    self.errors.add(:base, "Goal company and customer company must be equivalent") unless goal.company == customer.company
  end
end
于 2012-06-28T16:46:15.513 に答える