Как я могу проверить, имеет ли поле проверку в Rails 6?

#ruby-on-rails #ruby #ruby-on-rails-6

#ruby-on-rails #ruby #ruby-on-rails-6

Вопрос:

У меня есть Address модель, которая содержит следующую проверку:

 with_options if: Proc.new{|i| i.country amp;amp; i.country.downcase == "united states"} do
    validates :state, presence: true
end
  

В моей новой и редактируемой форме я хочу проверить и посмотреть, требуется ли поле состояния. Следующая функция возвращает проверку наличия, но она не учитывает мое условие.

 Address.new._validators[:first_name]
  

Этот код возвращает

 [#<ActiveRecord::Validations::PresenceValidator:0x00007fadebc9d8a8 @attributes=[:first_name], @options={:if=>#<Proc:0x00007fadebc9ebb8@/Users/cannonmoyer/Documents/RailsProjects/treadmilldoctorrails/app/models/address.rb:18>}>]
  

Есть ли способ выполнить условие для проверки, чтобы средство проверки наличия не отображалось в каждом экземпляре? Я хочу использовать это для установки обязательных полей в моем HTML.

Комментарии:

1. Это концептуально ошибочно — _validators возвращает список проверок (которые в основном являются обратными вызовами), которые будут выполняться при запуске обратного вызова проверки или при вызове #valid? модели. if/unless Параметры оцениваются при выполнении проверок точно так же, как соответствующий параметр для обратных вызовов.

Ответ №1:

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

 validates :state, presence: true, if: :state_required?

def state_required?
  country amp;amp; country.downcase == "united states"
end
  

И, на ваш взгляд, вы можете сделать что-то вроде:

 <% if @address.state_required? %>
  # state select
<% end %>