Подтвердить что ты не робот

Rails 4 найти или создать методом не работает

У меня есть одна-много ассоциация между рабочими местами и компаниями, и она работает нормально. В представлении формы работы у меня есть текстовое поле для названия компании с функцией автозаполнения. Автозаполнение работает нормально, но find_or_create_by не создает новую компанию, если я помещаю название компании, которое не существует в списке автозаполнения.

  def company_name
    company.try(:name)
  end

  def company_name=(name)
    @company = Company.find_or_create_by(name: name)
  end
4b9b3361

Ответ 1

Пожалуйста, посмотрите этот ответ.

Что раньше было

@company = Company.find_or_create_by_name(name)

в Rails 4 теперь

@company = Company.find_or_create_by(name: name)

Еще один способ сделать это в Rails 4:

@company = Company.where(name: name).first_or_create

Ответ 2

Company.find_or_create_by(name: name)

Он должен работать из коробки. Единственное, что может помешать созданию записи, - это ошибки проверки.

Попробуйте в rails console проверить, работает ли он. Также проверьте ошибки проверки.

name = "YOUR TEXT FOR NAME ATTRIBUTE"
c = Company.find_or_create_by(name: name)
puts c.errors.full_messages

Ответ 3

Этот метод устарел в рельсах 4.

Сообщение о выпуске Rails4:

Устаревший API-интерфейс поиска, основанного на хеш-стиле. Это означает, что методы, ранее принявшие "параметры поиска", больше не выполняются.

Это устаревший метод, но он должен работать. Возможно, Rails теперь не поддерживает его.

Вы можете получить дополнительную информацию нажмите здесь и отметьте 11.2 Deprecations.