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