Флажок для условий, без столбца в базе данных
Мне нужно установить флажок "Я принимаю условия обслуживания" на странице, его нужно проверить, чтобы заказ продолжался. Похоже, нелогично иметь столбец в базе данных, чтобы соответствовать этому (независимо от того, приняли ли пользователи или отклонили термины).
Я использую помощник формы, как это, на мой взгляд:
<%= check_box("client", "terms") %>
И в моей модели:
validates_acceptance_of :terms
В настоящий момент он вообще не работает.
Это похоже на действительно распространенную часть кода, но я не могу найти его нигде без условий в модели. Else я мог бы использовать javascript для проверки его, но предпочел бы сохранить его все в модели.
Ответы
Ответ 1
Это должно работать нормально, без столбца базы данных или attr_accessor:
http://guides.rubyonrails.org/active_record_validations.html#acceptance
Я был бы склонен проверять хэш вашего params так же, как и должно быть, т.е. атрибут 'terms' передается в хэше клиента, возможно, попробуйте добавить raise params.inspect
на ваш контроллер, создайте действие, чтобы помочь вам отлаживать?
Ответ 2
Как насчет наличия attr_accessor :terms
в вашей модели клиента?
Ответ 3
attr_accessor: термины прекрасно справятся с трюком.
Ответ 4
Либо переходите к решению @neutrino, либо к reset: условия для "не принимаются", если вам нужно повторно отобразить форму (поскольку проверка может завершиться неудачей), используйте это:
def terms
nil
end
def terms=(val)
# do nothing
end
Ответ 5
У меня было это с этими настройками:
В controller
я добавил: terms_of_service как разрешенное поле:
def application_params
params.require(:application).permit(. . . , :terms_of_service)
end
В model
:
attr_accessor :terms_of_service
validates :terms_of_service, :acceptance => true
В view
:
<%= f.check_box("terms_of_service", :checked => false) %>