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