我目前正在研究飲食跟蹤應用程序。我有一個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
驗證沒有區別。幫幫我?