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


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

  def company_name
    company.try(:name)
  end

  def company_name=(name)
    @company = Company.find_or_create_by(name: name)
  end
3   51   2014-03-20 03:20:32

3 ответа:

пожалуйста, взгляните на ответ.

то, что раньше было

@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
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

этот метод устарел в rails 4.

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

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

это устаревший метод, но он должен работать. Может быть, рельсы не поддерживают его сейчас.

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