【问题标题】:Rails4: Save object with has_many fails on the has_many model validatorRails4:使用 has_many 保存对象在 has_many 模型验证器上失败
【发布时间】:2013-09-13 09:56:53
【问题描述】:

我正在尝试一次保存两个模型(一对多)。我的代码如下所示:

@submission = Submission.new(submission_params)

@submission_asset = @submission.attachments.new(submission_asset_params)
@submission_asset.attachment_type = 'submission_asset'

if @submission.save
  # render or redirect here
else
  @submission.errors
end

但是当我运行它时,我得到了这个错误@messages={:attachments=>["is invalid"]}。我想是因为我的依恋模型有这个:

# Attachment model snippet
validates :attachable_id, :attachable_type, presence: true

但这是为了确保它附加到Submission。但是当我删除或注释掉验证时,它会起作用并保存两个模型和关联。

如何保存?

编辑

class Submission < ActiveRecord::Base
  has_many :attachments, as: :attachable, dependent: :destroy
end

class Attachment < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true

  validates :attachable_id, :attachable_type, presence: true
end

【问题讨论】:

  • 这是多态关联吗?能否请您提供您的协会的相关型号代码...
  • 是的。添加了相关的模型。

标签: ruby-on-rails activerecord has-many


【解决方案1】:
@submission_asset = @submission.attachments.build(submission_asset_params)

更新:

class Submission < ActiveRecord::Base
  has_many :attachments, as: :attachable, inverse_of: :attachable, dependent: :destroy
end

class Attachment < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true

  validates :attachable, presence: true
end

【讨论】:

  • 我这样做了,但是当我这样做@submission.save时它并没有保存附件。
  • 实际上,它仍然在Attachment 上运行验证,即使使用build 仍然失败
  • 对不起。 build 不工作 b/c @submission 不持久。试试我的更新
  • 哦,在我从 validates :attachable_id, :attachable_type, presence: true 更改为 validates :attachable, presence: true 后它确实有效...我想我使用了错误的字段进行验证?
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多