Как проверить с pro c в рельсах - PullRequest
0 голосов
/ 24 апреля 2020

item.rb

У меня есть enum: enum type: { only_rental: 0, rental_buy: 1, only_one: 2 }

Теперь я хочу, чтобы, если в случае type = "only_one", rental_by ", price было бы> 0 и наоборот, если это было "only_rental тогда = 0

validates :price, allow_nil: true, numericality: {
    only_integer: true,
    greater_than: 0,
    less_than: 1000000,
  }
  validates :price, if: proc { !only_rental? }

Я попробовал это следующим образом, но я, кажется, не работает

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Попробуйте

validates :price, allow_nil: true, numericality: {
    only_integer: true,
    greater_than: 0,
    less_than: 1000000,
  }, unless: Proc.new { only_rental? }

Вы можете использовать синтаксис lambda для Proc.new { only_rental? } как -> { only_rental? }

0 голосов
/ 24 апреля 2020

Я предпочитаю проверять формат с помощью validates и помещать такие логики c как ваши в validate методы:

validates :price, allow_nil: true, numericality: { only_integer: true, less_than: 1000000 }
validate :price_amount

def price_amount
  if only_rental?
    price.zero?
  else
    price.positive?
  end
end

также вы можете использовать Rails 'with_options:

with_options allow_nil: true, numericality: { only_integer: true, less_than: 1000000 } do
  validates :price, numericality: { greater_than: 0 }, unless: :only_rental?
  validates :price, numericality: { in: [0] },         if:     :only_rental?
end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...