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

时间:2014-03-19 23:20:33

标签: ruby-on-rails ruby-on-rails-4 associations

我在工作和公司之间有一对多的关联,而且工作正常。在作业表单视图中,我有一个带有自动完成功能的公司名称的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 个答案:

答案 0 :(得分:110)

请查看this answer

过去是什么

@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

答案 1 :(得分:23)

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

答案 2 :(得分:0)

此方法在rails 4中已弃用。

Rails4发布消息:

  

不推荐旧式基于散列的finder API。这意味着以前接受" finder选项"不再这样做了。

这是不推荐使用的方法,但应该可以使用。也许,Rails现在不支持它。

您可以获取更多信息click here并查看11.2 Deprecations