【问题标题】:Scope Option in Uniqueness Helper in RailsRails 中唯一性助手中的范围选项
【发布时间】:2012-10-28 23:42:27
【问题描述】:

在阅读 Rails 指南时,我遇到了一些我不确定的事情。在示例中,它表明我可以编写一个范围选项来添加额外的选项来检查唯一性。我的问题是,我是否必须写出一种专门针对某个时间段进行查询的方法。换句话说,在下面的示例中,是否有比看上去更多的代码?如果没有,Rails 怎么知道在表数据库中检查正确的时间戳列?

class Holiday < ActiveRecord::Base
   validates :name, 
             :uniqueness => { :scope => :year,
             :message => "should happen once per year" }
end

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-3 helper


    【解决方案1】:

    所有这些都是为了确保模型上 year 列的上下文中的唯一性 - 该列可以是任何东西,但它必须存在。它不会自动检查带有完整日期的时间戳的年份部分。您的模型负责实际存储 year 值。

    您当然可以自动填充此year。假设您的模型中有一个 holiday_date 列。然后你可以确保year 列总是这样设置:

    before_save :set_year
    
    def set_year
      self.year = holiday_date.try(:year)
    end
    

    try 方法只是确保在 holiday_date 恰好是 nil 时不会出错)

    【讨论】:

    • 很好的解释。感谢您的帮助。
    【解决方案2】:

    如果Holiday 模型有一个year 字段(即如果holidays 表有一个year 列),这将起作用。然后 AR 将简单地将名称唯一性限制为具有相同 year 的记录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多