Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails验证错误:ActiveRecord::RecordInvalid_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails验证错误:ActiveRecord::RecordInvalid

Ruby on rails Rails验证错误:ActiveRecord::RecordInvalid,ruby-on-rails,Ruby On Rails,我的Rails应用程序中的验证有点困难。 我有以下设置: class MealDay < ApplicationRecord belongs_to :meal belongs_to :day has_many :meal_day_canteens has_many :canteens, through: :meal_day_canteens validates :meal_id, uniqueness: {scope: :day_id} e

我的Rails应用程序中的验证有点困难。 我有以下设置:

class MealDay < ApplicationRecord
    belongs_to :meal 
    belongs_to :day
    has_many :meal_day_canteens
    has_many :canteens,
    through: :meal_day_canteens
    validates :meal_id, uniqueness: {scope: :day_id}
end

#MainController
helping_hash.each { |days, meal|
            dayRef = Day.where(date: days).first
            mealRef = Meal.where(name: meal)
            dayRef.meals << mealRef #This line is obviously throwing the error because a record exists already
}
class MealDaydayRef.finesRails唯一性约束基本上是在后台抛出一个查询来查找数据库中的记录。更多的是旁注,但这已经不安全了,所以我建议您在数据库级别添加一个约束

基本上,您需要手动跳过已经存在的

基本上是这样的:

helping_hash.each do |day, meal|
  day_ref = Day.find_by!(date: day)
  meal_ref = Meal.find_by!(name: meal)
  unless day_ref.meal_ids.include?(meal_ref.id)
    # Depending on the number of records you expect
    # using day_ref.meals.exists?(id: meal_ref.id) may be a better choice
    day_ref.meals << meal_ref
  end
end
每天、每顿饭| day\u ref=day.find\u by!(日期:day) 膳食参考=膳食。查找者!(名称:膳食) 除非日参考餐号包括?(餐号) #取决于预期的记录数 #使用day\u ref.Founds.exists?(id:Found\u ref.id)可能是更好的选择
第二天参考餐如何
rescue
消除错误

helping_hash.each do |days, meal|
  dayRef = Day.where(date: days).first
  mealRef = Meal.where(name: meal)
  dayRef.meals << mealRef rescue next
end
help|u hash.每做一天,每顿饭|
dayRef=天。其中(日期:天)。第一个
mealRef=膳食。其中(名称:膳食)

dayRef.Founds感谢您的回答,但我不想这样做。我可以为exists或include函数定义另一个条件吗?因为如果Found和day已经在数据库中,我不想插入它。基本上是对(Found\u id,day\u id)的约束.我想我的问题并不是很清楚。嘿,这对我的第一部分代码来说很好,但是你能再看一下我的问题并帮我完成我添加的部分吗。谢谢。它被插入了很多次。你在这些模型中也有验证吗?我只是想也是-。-我忘了在那个模型中添加验证。现在每个事情很好。很好。顺便说一句,这是一个黑客解决方案。因为它
rescue
s所有的例外情况。不推荐,但如果你知道你在做什么,它会很有用。记下这一点。。
helping_hash.each do |days, meal|
  dayRef = Day.where(date: days).first
  mealRef = Meal.where(name: meal)
  dayRef.meals << mealRef rescue next
end