Я пытаюсь проверить основы c создать действие. У меня есть модель MealPlan
, которая has_many :dinners, through: :meals
. Пользователь может создать MealPlan на неделю, который будет добавлять 7 блюд с указанием c ужинов. Это работает.
У меня проблемы с его тестированием.
setup do
@user = users(:travis)
sign_in @user
end
test "should create a mealplan" do
post meal_plans_url, params: { meal_plan: {dinner_ids: [1, 2, 3, 4, 5, 6, 7],
weekof: Date.today.beginning_of_week.next_week }}
assert_redirected_to meal_plan_path(MealPlan.last)
end
end
Это вызывает метод создания в food_plans_controller:
def create
@meal_plan = current_user.meal_plans.build(meal_plan_params)
respond_to do |format|
if @meal_plan.save!
format.html { redirect_to @meal_plan, notice: 'Dinner was successfully created.' }
else
...
end
end
end
Довольно просто, я думаю но всякий раз, когда я пытаюсь сохранить это в тестах, я получаю эту ошибку: ActiveRecord::RecordInvalid: Validation failed: Dinners is invalid
(я добавил удар на save
, чтобы увидеть, что происходит).
Кроме того, у меня есть приспособления для 7 обедов, которые я может получить доступ, когда я настрою эти тесты.
Это - файл food_plan.rb для некоторого контекста, опять же ничего необычного:
class MealPlan < ApplicationRecord
belongs_to :user
has_many :meals
has_many :dinners, through: :meals
end