#ruby-on-rails #validation #jquery #confirm
#ruby-on-rails #проверка #jquery #подтвердите
Вопрос:
У меня есть форма, используемая для создания команды (модель Team).
Форма добавляет участников в команду (через модель TeamMember).
Каждая команда работает в компании. Все пользователи принадлежат компании.
В настоящее время у меня есть проверка модели члена команды, которая не позволяет пользователю стать членом команды, когда пользователь работает в другой компании, чем работает команда.
Недавно меня попросили изменить эту функциональность, поскольку бывают случаи, когда команде необходимо добавить участника, который работает в другой компании.
Моя простая проверка теперь стала сложной.
Теперь мне нужно предоставить предупреждение, когда предлагаемый член команды работает в другой компании, и дать пользователю возможность подтвердить (да / нет), все ли в порядке, прежде чем сохранять изменения.
Каков чистый, удобный для rails способ добиться этого? Я полагаю, что есть решение Ajax (возможно, лайтбокс), но я не уверен, что это лучший способ его реализации или у кого-то уже есть умный камень / плагин для решения этой ситуации.
Ответ №1:
Я бы использовал для этого пользовательскую проверку, как вы сейчас, и добавил в модель изменяемый атрибут, который не сохраняется в БД. Например:
class TeamMember < ActiveRecord::Base
attr_accessor :user_confirmed
after_intialize :setup
def setup
self.user_confirmed = false
end
end
Что вам нужно сделать, это добавить проверку в свой метод проверки, если self.user_confirmed имеет значение false. Если это так, в дополнение к описанному выше отношению к БД, сделайте его недействительным. Затем в вашем представлении добавьте оператор if:
<% if @team_member.errors[:key_you_use_to_add_to_base].first == "Error Message" %>
<%= f.label :user_confirmed, "User works for another company, are you sure?" %>
<%= f.check_box :user_confirmed, {}, "true", "false" %>
<% end %>
Имейте в виду, поскольку метод check_box использует строки, вам нужно будет преобразовать результат этого атрибута в хэше ваших параметров в логическое значение.
Я думаю, что это должно сработать. Обратите внимание, что вам может потребоваться настроить оператор if, если к тому же ключу могут быть добавлены какие-либо другие ошибки проверки.