У меня есть проекционная модель, которая проверяет уникальность атрибута «ppr». Мне не нужны несколько записей Projection, где: week,: player_id,: ppr, AND: created_at год одинаковы. Ключевая проблема заключается в том, что я не знаю, как сделать эту проверку конкретным для created_at year. Я не возражаю, если есть несколько записей, где: ppr,: player_id и: неделя - все равно, если они предназначены для разных дней создания.Rails 3 validates_uniqueness_of для двух атрибутов модели AND created_at year
Например:
Вот запись Проекция.
#<Projection id: 44, ppr: 3.5, salary: 6600, week: 1, created_at: "2014-09-04 06:05:34", player_id: 44>
Если я хочу, чтобы создать эту дополнительную запись Проекции моей текущая проверка не допустит, даже если created_at год 2015, а не 2014.
#<Projection id: 89, ppr: 3.5, salary: 6600, week: 1, created_at: "2015-09-05 06:05:34", player_id: 44>
Как изменить свою проверку, чтобы учесть это дополнительное ограничение и разрешить записи из другого года?
я в основном нужно объединить эти два валидаций:
validates_uniqueness_of :ppr, :scope => [:week, :player_id], :if => :nfl?
validates_uniqueness_of :ppr, conditions: { -> { where("created_at >= ? and created_at <= ?", "#{Date.today.year}0101", "#{Date.today.year}1231") } }
Добавлено ниже, как я в данный момент у меня есть настройки модели:
class Projection < ActiveRecord::Base
attr_accessible :ppr, :salary, :score, :week, :player_id, :created_at
belongs_to :player
validates_uniqueness_of :ppr, :scope => [:week, :player_id], :if => :nfl?
scope :for_year, lambda {|year| where("created_at >= ? and created_at <= ?", "#{year}0101", "#{year}1231")}
end
UPDATE
Этот синтаксис не сделал работа по очевидным причинам, но могу ли я сделать что-то подобное этому?
validates_uniqueness_of :ppr, :scope, :created_at => [:week, :player_id, created_at <= ?", "#{Date.today.year}0101", "#{Date.today.year}1231"], :if => :nfl?
спасибо @ scarver2 !! – Smooth