У меня есть приложение rails с двумя отдельными моделями с двумя отдельными представлениями, называемыми Office и Prospect.
Модель офиса:
class Office < ActiveRecord::Base
has_one :prospect
end
Перспективная модель:
class Prospect < ActiveRecord::Base
belongs_to :office
def office_company
office.try(:company)
end
def office_date
office.try(:office_date)
end
def office_company=(company)
self.office = Office.find_or_create_by(company: company)
end
def office_date=(office_date)
self.office = Office.find_or_create_by(office_date: office_date)
end
end
В таблице Prospect есть ключ office_id.
Представление формы перспективы:
<!-- Date -->
<div class="row form-box-outline">
<div class="form-subheader">Date</div>
<div class="form-group">
<%= f.label :Office_Date %>
<%= f.text_field :office_date, class: "space form-control input-width",
'data-provide' => 'datepicker', 'data-date-format' => 'yyyy-mm-dd',
'data-date-today-highlight' => 'true', 'data-date-orientation' => 'bottom auto',
'data-date-today-btn' => 'linked', 'data-date-autoclose' => 'true',
'data-date-keyboard-navigation' => 'false' %>
</div>
</div>
<!-- Prospect Information -->
<div class="row form-box-outline">
<div class="form-subheader subform-box-outline">Prospect Information</div>
<div class="subform-box-outline">
<div class="form-group ">
<%= f.label :Company, "Account Prospect" %>
<%= f.text_field :office_company, class: 'space form-control' %>
</div>
</div>
При создании нового потенциального клиента мне нужен доступ к полю компании и полю даты (а в будущем, возможно, еще к одному или двум полям) в модели Office, что не является проблемой для определенных методов, которые я написал. Проблема возникает, когда я сохраняю новую перспективу, в модели Office сохраняются две записи базы данных. Одна запись с клиентом и одна на дату. В модели потенциального клиента сохранена одна запись: одна с информацией о потенциальном клиенте и ключом office_id. Я считаю, что это происходит потому, что два объекта создаются, а затем сохраняются.
Каков наилучший способ объединить мои методы, чтобы я всегда создавал одну запись для каждого создания и обновления в своем представлении формы?
Является ли отношение has_one author_to лучшим способом сделать это? Я чувствую некоторое сопротивление, что это не лучшая практика или путь Rails.
Я уже пробовал это с использованием вложенных атрибутов, но обнаружил, что каждый раз, когда создавалась запись, представление редактирования потенциального клиента было пустым с компанией и датой, даже если запись существовала в таблице Office и присутствовал ключ office_id.
Проспект — это возможный будущий офис, но не активный (клиентский) офис. Офис может быть активным, предполагаемым или неактивным. Я хочу, чтобы пользователь мог легко переместить потенциального клиента в (активный) офис (это задается с помощью раскрывающегося списка во время создания потенциального клиента или офиса), а не создавать потенциального клиента с отдельным названием компании.
Таблицы Prospect и Office содержат очень разную информацию, но имеют несколько общих полей (компания, дата, статус, пользователь). Офисная таблица содержит всю информацию о компании (название компании, адрес и т.д.). Таблица потенциальных клиентов содержит маркетинговые материалы, относящиеся к этому офису. Я хотел, чтобы у Prospects был отдельный контроллер представления и модель, чтобы их можно было отличить от Office.