【发布时间】:2011-01-23 12:53:47
【问题描述】:
我正在为一个小型分析实验室构建一个简单的样本跟踪器,我正在努力解决一个问题。在结构上,数据库由用户、批次、样品、仪器和化验组成。请原谅凌乱或糟糕的代码,我是 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参数填充。不幸的是,我所有尝试构建这样的方法都是徒劳的。
我已经观看了我能找到的所有相关 Railscast,阅读了 API 条目,而且我已经为此研究了太多小时。我可以在我的脑海中感受到答案,我迫切需要一个啊哈!片刻。感谢您提供的任何帮助!
【问题讨论】:
标签: ruby-on-rails forms callback data-modeling