Как я могу создать пользователя до инициализации модели - PullRequest
0 голосов
/ 06 сентября 2011

В моей модели (Product) у меня есть подтверждение, что у каждого продукта должен быть действительный владелец (login_id пользователя)

validates_presence_of :owner
validates_inclusion_of :owner, :in => User.first.login_id, :message => "%{value} is not a valid owner name"

Я пытаюсь создать макет объекта продукта с помощью Factory Girl

для создания нового продукта мне нужен login_id пользователя.для этого мне нужно создать пользователя.

до этого все в порядке, но когда я пытаюсь создать продукт с использованием этого пользователя, то login_id продукт не создается, и отображается сообщение проверки («пользователь1 недействительное имя владельца ").

После более глубокого изучения я обнаружил, что

  1. Проблема возникает из-за проверки в моей модели.
  2. У меня есть проверка (validates_inclusion_of:владелец: in => User.first.login_id), который инициализируется перед созданием фиктивного пользователя в factory.rb, (до этого времени пользователь не создавался в базе данных, пользователь создается после инициализации модели при выполнении factory.rd)

Мой вопрос: 1. Как я могу создать пользователя до инициализации модели.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Я решаю эту проблему следующим образом:

В моей модели я заменил 'Проверка правильности Rails', написав Пользовательский метод проверки. Этот пользовательский метод проверки будет вызываться во время создания продукта.

validates_presence_of :owner
validate :owner_should_be_registered_user

def owner_should_be_registered_user
    if !User.all_user.include? owner and !owner.nil?
      errors.add(:owner, "is not a valid user")
    end
  end
0 голосов
/ 06 сентября 2011

Разве вы не можете создать объект пользователя, а затем передать этот объект вашей фабрике продуктов? Это должно создать действительного пользователя, а затем предоставить его через ассоциацию владельцев и сделать продукт действительным.

user = Factory(:user, :name => "User1")
product = Factory(:product, :owner => user)

Этот пользователь, очевидно, тоже должен быть первым? Поэтому, если у вас есть существующие объекты пользователя, вы можете попробовать очистить всех пользователей перед созданием первого.

User.delete_all
...