Rails: создайте родителя, используя собственное представление родителей, создавая дочернюю запись - PullRequest
1 голос
/ 30 октября 2010

В процессе ввода новой записи (дочерней), которая является неполной и не может быть сохранена, я хочу иметь возможность добавить запись в другую модель (родительскую), а затем использовать ее для завершенияоригинал записи (ребенок).Родитель имеет много обязательных атрибутов, а не только одно поле.Я хочу сделать это как можно более сухим способом, используя представление «Создать / Создать» и проверки каждой модели.

Все примеры, которые я видел, показывают, как вводить родительские и дочерние данные водна форма, использующая acceptpts_nested_attributes_for.Я хочу сделать это в обратном порядке, создав нового ребенка, а затем использовать собственные формы родителей, чтобы добавить их, если они еще не существуют.

например, эта модель запроса на продажу, которая имеет несколько родительских моделей

class Enquiry < ActiveRecord::Base
  belongs_to :salesperson
  belongs_to :customer
  belongs_to :site
end

Я хочу создать новый запрос и выбрать клиента и сайт, которые могут быть, а могут и не быть в базе данных.,Если они находятся в БД, автозаполнение найдет их, в противном случае мне нужно добавить нового клиента или сайт.Клиенту требуется больше, чем просто один атрибут, например, имя, которое нужно ввести.Также требуются другие данные, такие как адрес, контакт и т. Д. Я не хочу встраивать форму клиента в форму запроса, поскольку мне потребуется добавить новых клиентов из многих других частей приложения.Поэтому я всегда хочу использовать и поддерживать одну форму клиента: customer-> new.html.erb. Запрос не может быть сохранен без клиента, поэтому мне нужен способ сохранить частично введенные данные.

Я могу подумать о двух способах сделать это.

  1. Сохраните все данные запроса, которые были частично введены в сеансе, откройте новое представление клиента и после его полного перенаправлениявернуться к форме запроса и отобразить данные, которые были введены до сих пор.

  2. Некоторое всплывающее окно лайтбокса, которое может использовать новый вид родительской модели и при этом сохранять форму запроса открытой.фон.

Будет ли работать любой из них?Если так, может кто-нибудь показать мне пример кода, как заставить его работать?Иначе, есть ли другой лучший способ сделать это?

1 Ответ

0 голосов
/ 30 октября 2010

Вы можете использовать ту же систему стиля nested_attributes.

В вашей форме вы можете определить атрибуты с помощью enquiry[customer_attributes][name].После того, как вам просто нужно определить в своей модели запроса этот атрибут

class Enquiry < AR

  def customer_attributes=(params)
    self.customer = Customer.create(params)
  end
end

, поэтому, если есть параметры, которые создает клиент.Если есть запрос [customer_id] нет, и вы создаете ассоциацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...