【问题标题】:Rails 4 find or create by method doesn't workRails 4按方法查找或创建不起作用
【发布时间】:2014-04-26 13:10:05
【问题描述】:

我在工作和公司之间建立了一对多的关联,并且效果很好。在工作表视图中,我有带有自动完成功能的公司名称的 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

【问题讨论】:

  • 如果我创建一个工作并将一个未退出的新公司放入公司列表中,则不会创建新公司

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


【解决方案1】:

请看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

【讨论】:

    【解决方案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
    

    【讨论】:

    • 这也是一个很好的答案
    • 这是一个很好的答案。在 find_or_create_by 之后我有验证错误,我错过了并且想知道。我添加了保存!并发现验证错误。谢谢!
    【解决方案3】:

    此方法在 rails 4 中已弃用。

    Rails4 发布消息:

    弃用了旧式基于哈希的查找器 API。这意味着以前接受“查找器选项”的方法不再适用。

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

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

    【讨论】:

    • 不推荐使用 find_or_create_by_name( name ) 样式。根据您链接到的文档,find_or_create_by( name: name ) 仍然可以,并且是推荐的方法...
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2013-07-28
    • 2014-09-23
    相关资源
    最近更新 更多