我目前正在研究饮食跟踪应用程序。我有一个FoodEntry模型,其中每个实例都引用另一个表中的单个food
,并且还从另一个表中引用measurement
单元。验证Rails中的关联模型
class FoodEntry < ActiveRecord::Base
belongs_to :food
belongs_to :measurement
validates :food, presence: { message: 'must exist' }
...
end
这工作正常,但问题是,在measurements
表中的每个条目设置(因为我使用外部数据)将具有一定food
相关,即测量属于食品和食物有许多测量:
class Food < ActiveRecord::Base
has_many :measurements
...
end
class Measurement < ActiveRecord::Base
belongs_to :food
...
end
我的问题是,什么是验证我引用一个food_entry
具体measurement
也是其food.measurements
的一个正确的方法是什么?
目前在我的FoodEntry
模型我这样做:
validate :measurement_must_be_associated
def measurement_must_be_associated
unless food.measurements.include? measure
errors.add(:measurement, 'is not associated with that food')
end
end
这个自定义的验证工作,但我不知道它是做最彻底的方法。
我试图做到这一点,而不是:
validates :measurement, inclusion: { in: food.measurements }
但是这给我打电话的轨道控制台FoodEntry.new(food_id: 1, measurement_id: 1)
当错误(实际id
s为无关):
NameError: undefined local variable or method `food' for FoodEntry (no database connection):Class
在使用in: self.food.measurements
验证没有区别。帮帮我?