如何为构建ActiveRecord关联提供默认值?

时间:2015-09-24 17:10:11

标签: ruby-on-rails ruby activerecord

如何为ActiveRecord关联提供默认值?

例如,我有一个应用程序,其中Attachment是一个多态模型,用于存储任何其他模型的二进制数据。它有一个mime_type字段。

对于某些协会,mime_type显而易见。例如,

class Invoice < ActiveRecord::Base

  has_one :pdf, # clearly this will be application/pdf
    class_name: "Attachment",
    as: :attached_to,
    dependent: :destroy

end

invoice.build_pdf(mime_type: "application/pdf")是重复的。这应该是我mime_type(或invoice.build_pdf等)时的默认.create_pdf!

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

在关联

上使用范围块

一种方法是在协会中添加范围。

class Invoice < ActiveRecord::Base

  has_one :pdf,
    -> { where(mime_type: "application/pdf") }, # here
    class_name: "Attachment",
    as: :attached_to,
    dependent: :destroy

end

这将在查询和构建时使用。