Rails 4通过方法查找或创建不起作用

use*_*ils 53 ruby-on-rails associations ruby-on-rails-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
Run Code Online (Sandbox Code Playgroud)

ero*_*sko 111

请看一下这个答案.

过去是什么

@company = Company.find_or_create_by_name(name)
Run Code Online (Sandbox Code Playgroud)

在Rails 4现在

@company = Company.find_or_create_by(name: name)
Run Code Online (Sandbox Code Playgroud)

在Rails 4中执行此操作的另一种方法是:

@company = Company.where(name: name).first_or_create
Run Code Online (Sandbox Code Playgroud)


Kal*_*are 24

Company.find_or_create_by(name: name)
Run Code Online (Sandbox Code Playgroud)

它应该开箱即用.只有可以阻止它创建记录的是验证错误.

试试这个rails console以检查它是否正常工作.并检查验证错误.

name = "YOUR TEXT FOR NAME ATTRIBUTE"
c = Company.find_or_create_by(name: name)
puts c.errors.full_messages
Run Code Online (Sandbox Code Playgroud)