Проверка формы Rails с вызовом и подтверждением базы данных - PullRequest
0 голосов
/ 20 октября 2011

У меня есть форма, используемая для создания команды (модель Team).

Форма добавляет членов в команду (через модель TeamMember).

Каждая команда работает наКомпания.Все пользователи принадлежат компании.

В настоящее время у меня есть проверка по модели TeamMember, которая не позволяет пользователю стать членом команды, если пользователь работает в другой компании, а не в команде.

Недавно меня попросили изменить эту функцию, поскольку в некоторых случаях команде необходимо добавить участника, который работает в другой компании.

Моя простая проверка теперь стала сложной.

Теперь мне нужно выдать предупреждение, когда предполагаемый член команды работает в другой компании, и дать пользователю возможность подтвердить (да / нет), нормально ли это, перед сохранением изменения.

Что такое чистый, дружественный рельсам способ сделать это?Я полагаю, что есть решение Ajax (возможно, лайтбокс), но я не уверен, что это лучший способ реализовать его, или у кого-то уже есть умный Gem / Plugin для решения этой ситуации.

1 Ответ

0 голосов
/ 21 октября 2011

Я бы использовал для этого пользовательскую проверку, как и сейчас, и добавил бы модифицируемый атрибут для модели, который не сохраняется в БД.Например:

class TeamMember < ActiveRecord::Base
  attr_accessor :user_confirmed
  after_intialize :setup

  def setup
    self.user_confirmed = false
  end
end

Вам нужно добавить проверку в метод проверки, если self.user_confirmed имеет значение false.Если это так, в дополнение к описанному выше отношению db, сделайте его недействительным.Затем, на ваш взгляд, добавьте оператор 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, если к этому ключу могут быть добавлены другие ошибки проверки.

...