【发布时间】:2014-12-03 17:14:07
【问题描述】:
我的 rails 应用程序有一个自动完成功能供用户选择,他们可以在其中选择公司或创建新公司公司显示页面,当用户放置一个不存在的公司时,我想要类似linkedin的东西,它不会被创建但会在配置文件中实际上我的代码是这样的
def company_name
company.try(:name)
end
def company_name=(name)
self.company = Company.find_or_initialize_by(name: name) if name.present?
end
<%= f.label :company_name, class: "jobs-newtitles" %><br />
<%= f.text_field :company_name, data: {autocomplete_source: Company.order(:name).map(&:name) },required: true,:autocomplete => :off, class: "form-control form-newjob" %>
我尝试将Company.find_or_initialize_by 更改为Company.find_by 但这不起作用,任何人都可以指导我如何实现这一目标
【问题讨论】:
-
你试过 find_by_name 吗? find by it 自己查找 id,find_by_name 应该可以工作
-
@NickCatib
find_by_name和所有find_by_*均已弃用。使用find_by(name: name) -
是的,我的错... DickieBoy 解决方案要好得多。将其发布为答案:)
-
@DickieBoy
find_by_name不折旧。见Rails 4 Release Notes。摘录:“除 find_by_... 和 find_by_...! 之外的所有动态方法均已弃用”。这已经发生了很多,所以我会尽可能地向每个人指出。许多动态查找器已被贬值,但find_by_...不是其中之一。find_all_by_...虽然已经和其他一些人在一起了。 -
@DickieBoy 我没有明确的理由对 Rails 开发人员来说是个问题,但这可能与这些方法产生对象实例的事实有关,其中许多可以使用生成 ActiveRecord::Relation 的 where 子句来重写折旧的方法。我认为
find_or_initialize_by_...和find_or_create_by_...已被贬值,因为将find_by()与first_or_[initialize/create]结合使用会产生相同的结果,而find_or_[create/initialize]_by()则更加灵活。但这些只是假设。
标签: ruby-on-rails ruby ruby-on-rails-4 associations