Флажок для условий, без столбца в базе данных

Мне нужно установить флажок "Я принимаю условия обслуживания" на странице, его нужно проверить, чтобы заказ продолжался. Похоже, нелогично иметь столбец в базе данных, чтобы соответствовать этому (независимо от того, приняли ли пользователи или отклонили термины).

Я использую помощник формы, как это, на мой взгляд:

<%= 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) %>