Флажок для условий, без столбца в базе данных - PullRequest
16 голосов
/ 11 февраля 2010

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

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

<%= check_box("client", "terms") %>

А в моей модели:

validates_acceptance_of :terms

В данный момент он вообще не работает.

Это похоже на действительно распространенный кусок кода, но я не могу найти его где-либо использованным, не имея терминов в модели. В противном случае я мог бы использовать javascript для проверки, но предпочел бы сохранить все это в модели.

Ответы [ 5 ]

14 голосов
/ 11 февраля 2010

Это должно работать нормально, без столбца базы данных или attr_accessor: http://guides.rubyonrails.org/active_record_validations.html#acceptance

Я был бы склонен проверить ваш хэш параметров в том виде, в каком он должен быть, т. Е. Что атрибут 'rules' передается в хэш 'client', возможно, попробуйте добавить raise params.inspect в действие контроллера на создание, чтобы помочь вам отладить?

5 голосов
/ 11 февраля 2010

А как насчет attr_accessor :terms в вашей модели клиента?

1 голос
/ 12 февраля 2010

attr_accessor: условия хорошо сработают.

0 голосов
/ 25 сентября 2017

Я работал с этими настройками:

В controller я добавил: term_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) %>
0 голосов
/ 11 февраля 2010

Либо воспользуйтесь решением @ neutrino, либо сбросьте: условия на «не принято», если вам нужно повторно отобразить форму (поскольку проверка может не пройти), используйте это:

def terms
  nil
end

def terms=(val)
  # do nothing
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...