2014-12-03 3 views
-1

I my rails app У меня есть автозаполнение для пользователей, где они могут выбрать свою компанию или поставить новую компанию. У меня также есть контроллер компании, но не хочу, чтобы компания, которая не существует в automplete быть доступными в компании показать страницу, я хочу что-то вроде LinkedIn, когда пользователь поставил компанию, которая не существует, он не будет создан, но будет в Профиле на самом деле мой код, как этоRails4: найти или создать метод

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

Вы пробовали find_by_name? найти его самостоятельно ищет id, а find_by_name должно работать – Miknash

+2

@NickCatib 'find_by_name' и все' find_by_ * 'устарели. Используйте 'find_by (name: name)' – DickieBoy

+0

Да, моя вина ... Решение DickieBoy намного лучше. Отправьте его как ответ :) – Miknash

ответ

2

Если Ваша проблема в том, как разработать такую ​​систему, как вы описываете, то я могу видеть, по крайней мере, два варианта

  • Добавить больше метаданных в Company модели

Добавить has_profile в Company и только установить его ложным для компаний, созданных с помощью пользовательской ассоциации. Затем фильтруйте его соответствующим образом там, где вам нужно. Уход за фильтрацией может быть немного болезненным в зависимости от того, как работает ваш домен, и я предлагаю держаться подальше от областей по умолчанию.

  • Работа с другой моделью для ассоциированной компании

User имеет много AssociatedCompany, которые могут иметь свои собственные данные, такие как имя и размер, и может принадлежать к Company. Если AssociatedCompany относится к Company, вы можете вытащить данные типа name из Company, указав в нем методы, которые проверяют, присутствует ли он, и если не использовать свойство name в 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

Смежные вопросы