我有这个模型,这个模型是中间的table
class CompanyTaskProgress < ApplicationRecord
include Discard::Model
belongs_to :task, class_name: 'Tasking::Task'
belongs_to :progress
end
如果我不添加这些行,它工作得很好:
belongs_to :company_task
belongs_to :progress
这是我的任务模型
module Tasking
class Task < ApplicationRecord
has_many : company_task_progresses, dependent: :destroy
has_many :progresses, through: : company_task_progresses
end
end
只有我试图创建一些对象与迭代:
ids.each do |id|
created = CompanyTaskProgress.create(progress_id:, task_id:)
p 'RESULT',created
end
我正在获取尚未在db中创建的对象
'RESULT', #<CompanyTaskProgress id: nil, progress_id: 47, task_id: 1000, discarded_at: nil, created_at: nil, updated_at: nil>
2条答案
按热度按时间brtdzjyr1#
belongs_to
关联要求关联的记录默认存在,Ruby on Rails添加了验证来确保这一点。这意味着当你加上Rails期望在模型的数据库表上有一个
company_task_id
列,如果不传递分配一个指向现有CompanyTask
记录的company_task_id,就不能创建新记录。不幸的是,你的例子不清楚。注意
是一条捷径
但在您的示例中,您迭代了
ids
并将id
传递给块。目前还不清楚您从哪里获得了要迭代的ids
。并且不清楚是否在迭代之外以某种方式设置了progress_id
和task_id
。如果您没有在each
块之前设置progress_id
和task_id
,则CompanyTaskProgress.create(progress_id:, task_id:)
快捷方式无法工作,因为这些值将无法正确分配。我建议在该方法中将
create
更改为create!
,然后您将获得一个异常,并显示一条错误消息,告诉您哪些验证失败。或者你可能想告诉Rails
belongs_to
关联是optional
,不应该被验证为存在,然后将关联的定义更改为:7vhp5slm2#
我不知道为什么它没有被保存,但我可以告诉你如何找到:
unsaved_object.errors.full_messages
会告诉你对象的验证问题。
如果这还不行,你可以试试
unsaved_object.save!
如果它不保存它就会爆炸并且应该会喷出有用的信息。有时候,数据库问题没有像您希望的那样记录到验证错误中。