Rails 4 find or create by method doesn't work

Ruby on-RailsRuby on-Rails-4Associations

Ruby on-Rails Problem Overview


I have a one to many association between jobs and companies and it works fine. In the job form view I have text_field for the company name with an autocomplete feature. The autocomplete works fine but the find_or_create_by don't create a new company if I put a company name that doesn't exist in the autocomplete list.

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

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Please take a look at this answer.

What used to be

@company = Company.find_or_create_by_name(name)

in Rails 4 is now

@company = Company.find_or_create_by(name: name)

Another way to do this in Rails 4 would be:

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

Solution 2 - Ruby on-Rails

Company.find_or_create_by(name: name)

It should work out of the box. Only thing that can prevent it from creating record is validation errors.

Try this in rails console to check if its working or not. And check the validation errors as well.

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

Solution 3 - Ruby on-Rails

This method is deprecated in rails 4.

Rails4 release message: >Deprecated the old-style hash based finder API. This means that methods which previously accepted "finder options" no longer do.

It is deprecated method, but it should work. Maybe, Rails is not supporting it now.

You can get more info click here and check 11.2 Deprecations.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLoenvpyView Question on Stackoverflow
Solution 1 - Ruby on-RailseroniskoView Answer on Stackoverflow
Solution 2 - Ruby on-RailsKalpesh FulpagareView Answer on Stackoverflow
Solution 3 - Ruby on-RailsumaView Answer on Stackoverflow