【问题标题】:Rails association - has at least oneRails 协会 - 至少有一个
【发布时间】:2014-05-15 00:47:09
【问题描述】:

我有一个模型ShippingOption,它有_many ShippingSpeedOptions

还有一个要求:

  • ShippingOption 必须至少有一个ShippingSpeedOption,这应该被验证,因为它可以在界面中移除

所以我在ShippingOption 上使用自定义验证:

  def has_at_least_one_shipping_speed_option
    errors.add(:shipping_speed_options, "Must have at least one delivery speed package") if self.shipping_speed_options.count <= 0
  end

问题在于,通过此验证,ShippingOption 根本无法保存,因为它没有 ShippingSpeedOptions。该关联由ShippingSpeedOption 中的shipping_option_id 定义。

我该如何处理?

【问题讨论】:

    标签: ruby-on-rails ruby database ruby-on-rails-3


    【解决方案1】:

    使用build,它会创建一个“等待中的关联”,将在保存对象时创建。

    @shipping_option = ShippingOption.new
    @shipping_option.shipping_speed_options.build(:shipping_speed => <speed>)
    @shipping_option.save 
    #at this point the validation is satisfied, @shipping_option is saved and the option is created.
    

    【讨论】:

    • build 的语法/参数是什么?
    • 好的,我在验证中将count 更改为size,现在可以构建了。谢谢!
    • 语法与 .new() 相同:settermmethod-value 对的哈希(大括号可选)。真的很像 .new 也可以建立关联。
    • 嗯,这很有趣。我想 .count 总是只做一个 db 查询,而 size 会先查看是否有任何加载的关联对象,如果没有,则构建 db 查询。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多