Я создаю простой образец трекера для небольшой аналитической лаборатории, и я ломаю голову над проблемой. Структурно база данных состоит из пользователей, партий, образцов, инструментов и анализов. Извините, пожалуйста, грязный или плохой код, я новичок в Rails и программировании. Вообще я знаю, где я неаккуратный и как это исправить, это просто вопрос, что я решил проблему. Вот некоторый сокращенный код:
class Batch
belongs_to :user
has_many :samples
has_many :submissions
has_many :assays, :through => :submissions
accepts_nested_attributes_for :samples
accepts_nested_attributes_for :submissions
end
class Assay
belongs_to :instrument
has_many :submissions
has_many :batches, :through => :submissions
end
class Submission
belongs_to :batches
belongs_to :assays
end
Я создал форму пакетной отправки, которая принимает информацию о пакете, имена образцов в качестве вложенного атрибута, и я также пытаюсь принять представления в качестве вложенного атрибута. Моя форма в настоящее время выглядит следующим образом (обратите внимание на строку комментария):
= semantic_form_for @batch do |f|
- @instruments.each do |instrument|
%ol
%li
= instrument.instrument_name
%ol
- instrument.assays.each do |assay|
%li
= assay.assay_name
# Some magic check boxes that fix my problem.
= f.inputs :name => "Batch Info" do
= f.input :sampling_date, :required => false
= f.input :experiment_name, :required => false
= f.input :notes, :as => :text
= f.semantic_fields_for :samples do |sample_form|
= sample_form.input :sample_name
= f.buttons do
= f.commit_button :label => "Submit batch"
Я хотел бы иметь флажок для каждого анализа, который передает assay_ids в таблицу представлений в качестве вложенного атрибута партии, волшебным образом удостоверяясь, что каждая партия связана с выбранными анализами.
Моя проблема заключается в том, чтобы решить, когда и как создавать представления в контроллере / модели и как их заполнять. Похоже, мне следует создать какой-то параметр, содержащий assay_ids, и использовать какой-то тип обратного вызова модели (before_create или before_save), который создает params[assay_ids].length
число фиктивных представлений, которые я могу заполнить параметрами assay_id. К сожалению, все мои попытки создать метод, который делает это, были тщетными.
Я смотрел все подходящие Railscasts, которые я мог найти, читал записи API, и я слишком долго занимался этим. Я чувствую ответ на самом кончике своего мозга, и я отчаянно нуждаюсь в Ага! момент. Спасибо за любую помощь, вы можете предоставить!