2016-02-08 4 views
-1

У меня есть приложение Rails 3.2.22, которое я поддерживаю, и мне нужно создать квази-сложную форму. Это форма, которая записывает лекарства в отчет.Динамическая вложенная форма в Rails

Так что я думал о создании модели под названием NarcoticUsage, которая бы содержала запись, а затем ассоциированную/вложенную модель под названием Narcotic, которая будет реальной моделью с названиями лекарств.

Мне нужно как-то в пределах формы использования наркотических средств включить функциональность, чтобы добавить несколько экземпляров модели Narcotic. то есть. Форма, в которой у вас будет название лекарственного средства (от модели наркозависимости), затем срок годности и серийные номера лекарств (хранящихся в NarcoticUsage). В форме я хотел бы иметь возможность щелкнуть знак «+» или что-то подобное, чтобы добавить несколько препаратов. Таким образом, по сути, если кто-то зарегистрировал Tylenol, Cough Syrup, Ativan, они могли бы добавить динамическое поле для заполнения названия лекарственного средства (от наркотического средства), затем ввести дату истечения срока действия и серийные номера, связанные с моделью наркотизации.

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

Любые мысли о лучших практиках с nested_forms?

Спасибо заранее, и если вам нужно уточнение или какой-либо образец кода, пожалуйста, дайте мне знать.

Update: Вот моя предложенная модель схемы

narcotic_usage.rb

has_many :narcotics 
attr_accessible :narcotic_id, :lot_number, :expiration_date 

narcotic.rb

belongs_to :narcotic_usage 
attr_accessible :name 
+0

Не могли бы вы перечислить соответствующие ассоциации в редактировании вашего вопроса? Например, как ваша схема различает 30 мл сиропа от кашля и 15 мл? –

+0

Один момент, я еще не построил свои модели, но я закоучу код. – nulltek

+0

@MaxWilliams Я добавил свои данные о модели. Но я думаю, мне, возможно, понадобится пойти по другому пути, основываясь на вашем предположении. – nulltek

ответ

0

Я не уверен, что если вам нужны вложенные формы для этого. Я бы хотел, чтобы вы перетащили/добавили в divs, представляющие Наркотики, каждый из которых имеет скрытое поле с именем, установленным на «narcotic_usage [narcotic_ids] []», и значением id этого наркотика.

Затем, когда форма была отправлена, идентификаторы всех из них автоматически перейдет в массив, доступ через params[:narcotic_usage][:narcotic_ids], а затем вы можете обновить @narcotic_usage объект с params[:narcotic_usage] обычным способом. Один из методов, предоставленных вам макросом has_many, - narcotic_ids=, который ожидает, что его вызывают с массивом наркотических идентификаторов.

Другими словами, если у вас есть тайленол с идентификатором 123 и Ativan с идентификатором 456, то делает это:

@narcotic_usage.narcotic_ids = [123,456] 
@narcotic_usage.save 

тогда рельсы будут делать ассоциации для вас в базе данных. Параметры вашей формы просто должны зацепиться за это.

+0

Это хорошая идея. Я могу сделать has_many_through, я полагаю, чтобы достичь лопатки массива в narcotic_ids. Но мне нужен способ динамически добавлять в форму несколько лекарств. Как я могу добавить дополнительные поля для выбора лекарств и добавить номера истечения/серийного номера для каждого препарата?Должно ли истечение/сериал жить в наркотическом или наркотическом деле? – nulltek

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