Я создаю простое приложение для управления расходами на рельсах 5.1.4. Я использую следующие пять моделей.
Получатели
class Payee < ApplicationRecord
has_many :expenses
validates :title, uniqueness: true, presence: true
end
учетные записи
class Account < ApplicationRecord
before_save :update_balance
validates :balance, numericality: { greater_than_or_equal_to: 0 }
has_many :expenses
end
Бюджеты
class Budget < ApplicationRecord
belongs_to :categories
has_many :expenses, through: :categories
end
Категории
class Category < ApplicationRecord
validates :title, uniqueness: true, presence: true
has_many :expenses
has_one :budget
end
Затраты
class Expense < ApplicationRecord
belongs_to :categories
belongs_to :budgets
belongs_to :payees
belongs_to :accounts
validates :title, :value, presence: true
before_save :default_account
end
Когда я пытаюсь создать новый расход, я сталкиваюсь с ошибкой проверки
Ошибка проверки: должны существовать категории, должны существовать бюджеты, должны существовать получатели платежей, должны существовать учетные записи.
Проблема заключается в том, что все вышеуказанные записи существуют. Чтобы объяснить себя, скажем, я передаю параметры account_id: 1, payee_id: 1, category_id: 1
. Если я сделаю:
Account.find(1) #=> Finds the record
Category.find(1) #=> also ok
Payee.find(1) #=> also ok
Мне известно об решении, упомянутом в этом вопросе ( добавляя optional: true
), но я не понимаю, почему я должен это делать, когда все вышеперечисленное существует
Редактировать
Код, который вызывает ошибку:
def create
@expense = Expense.create!(title: params[:expense]['title'],
value: params[:expense]['value'],
date: params[:expense]['date'],
comment: params[:expense]['comment'],
payee_id: params[:expense]['payee_id'],
category_id: params[:expense]['category_id'],
account_id: params[:expense]['account_id'])
end
Параметры, которые передаются через форму
{"utf8"=>"✓", "authenticity_token"=>"DWd1HEcBC3DhUahfOQcdaY0/oE+VHapxxE+HPUb0I6iSiqMxkz6l+vlK+1zhb66HnZ/vZRUVG4ojTdWUCjHtGg==", "расход"=>{"название"=>"тест", "значение "=>"-20", "category_id"=>"1", "payee_id"=>"2", "date"=>"2018-01-21", "account_id"=>"1", "comment "=>""}, "зафиксировать"=>"Отправить"}
Expense.new
, не существует, хотя она существует. Проблема возникает в базе данных, и я не понимаю, почему 21.01.2018