Rails4:查找或创建方法

时间:2014-12-03 17:14:08

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

我的rails应用程序我为用户提供了自动填充功能,他们可以选择他们的公司或新公司我也有公司控制人员但不想要一个在自动完成时不存在的公司可以在公司的展示页面访问,当我想要一个不存在的公司时,我想要一些类似于linkedin的东西,但是它将在profil中实际上我的代码是这样的

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,但这不起作用,任何人都可以指导我如何实现这一目标

1 个答案:

答案 0 :(得分:2)

如果您的问题在于如何设计系统,那么我可以看到至少两个选项

  • Company模型
  • 添加更多元数据

has_profile添加到Company,并且仅对通过用户关联创建的公司将其设置为false。然后根据需要随意过滤。根据您的域名的工作原理,处理过滤可能会有点痛苦,我建议远离默认范围。

  • 使用关联公司的其他模型

User有许多AssociatedCompany,它们可以拥有自己的数据,如名称和大小,并且可能属于Company。如果AssociatedCompany属于Company,那么您可以通过在其中定义检查其是否存在的方法来提取Company中的名称等数据,如果不使用该名称AssociatedCompany中的属性。

从代码的角度来看,对于Rails 4,我建议使用

Model.where(name: name).first_or_initialize
# or
Model.where(name: name).first_or_create

http://apidock.com/rails/ActiveRecord/Relation/first_or_initialize http://apidock.com/rails/ActiveRecord/Relation/first_or_create