所以我正在编写一个具有以下模型和关联的应用程序:
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 已经选择了目标或客户,而其他关联选择是基于其他模型的过滤集。理论上,用户不可能在两个不同的公司下创建任务,即@task.goal.company == @task.customer.company。
但是,进行验证以检查是否只有一个祖父母似乎是一种好习惯。我了解使用 Proc.new 可以验证是否满足特定条件,但我希望它始终验证,所以这不是我正在寻找的解决方案。
谢谢。
顺便说一句,如果模型结构看起来很可笑,或者我是否明确地违反了 Rails 约定,请告诉我。