#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 %>