将多表单的详细信息发送到数据库

时间:2011-06-21 11:40:52

标签: ruby-on-rails forms

我必须创建一个包含批次和样本的表单。

一般的想法是批量有(received:dategroup_leader:stringcontact_person:stringbatch_comment:stringnum_of_samples:integer。) N.B批次有很多样品。 现在样本包括(sample_namespeciessample_typeini_concini_volsample_comment)。

现在因为它们是一对多的关系,所以我在遵循许多教程后创建了一个表单,其中有一个页面显示批次详细信息条目以及询问每批中涉及的样本数量。在用户输入后(例如,3),表单生成三个包含样本详细信息的字段(还包括namespeciestypeconc,{{1但是我无法将这些细节发送到数据库 更新数据库的唯一方法是一个示例信息。 我的观点看起来像这样:

新样本:

vol

我没有对我的控制器做过多少工作。 (事实上​​我不知道我应该添加哪个控制器代码)意味着我已经创建了两个支架,一个用于批处理,一个用于样本,我已经将samples_view_new.html.erb的一部分组成并保存在batch_view文件夹中让我有机会在批次的 <p><% form_for(sample) do |f| %></p> <p><% (1..@batch.sample_no).each do |i| -%></p> <%= f.error_messages %> <p> <%= f.hidden_field :batch_id %> </p> <p> <%= f.label :sample_name %><br /> <%= f.text_field :sname %> </p> <p> <%= f.label :organism %><br /> <%= f.text_field :organism, :rows => 2 %> </p> <p> <%= f.label :sample_type %><br /> <%= f.select(:samp_type, %w{ DNA RNA}) %> </p> <p> <%= f.label :ini_conc %><br /> <%= f.text_field :ini_conc %> </p> <p> <%= f.label :ini_vol %><br /> <%= f.text_field :ini_vol %> </p> <p> <%= f.label :storage_space %><br /> <%= f.text_field :storage_space %> </p> <p> <%= f.label :samp_comment %><br /> <%= f.text_area :samp_comment, :rows => 3 %> </p> <% end -%> <p><%= f.submit 'Submit' %></p> <% end %> 中添加样本。

我的show_html.erbbatch.rb模型看起来像这样

sample.rb

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的要求,那么您正在寻找嵌套表格,如Ryan Bates在railscasts.com上所描述的那样

教程1:Nested Model Form Part 1

教程2:Nested Model Form Part 2

以下是一些帮助:

在你的Bash模型中

has_many :samples
accepts_nested_attributes_for :samples

您的Bash控制器将至少有2个操作:new和create 在你的新动作中:

@bash = Bash.build
4.times { @bash.samples.build } # where 4 is the no. of samples, could also be param[:amount] in case you add a preliminary action with a form and an amount field, but I suggest using javascript as described in Tutorial 2 above for better user experience

在创建动作中:

@bash = Bash.new(params[:bash]) # you now have access to @bash.samples
if @bash.save ...

最后是“新”观点:

<%= form_for @bash do |f| %>
  <%= f.text_field :group_leader %> <!-- ... -->
  <%= f.fields_for :samples do |builder| %>
    <%= builder.text_field :sample_name  %> <!-- ... -->
  <% end %>
<%= end %>

有了这个和教程,你现在应该能够为你的学位应用程序构建一个杀手级应用程序。祝你好运!

答案 1 :(得分:0)

我想我有解决问题的方法......

我的主要想法是一次在数据库中发送多行......所以请按照本教程

进行操作

http://www.stephenchu.com/2008/03/paramsfu-3-using-fieldsfor-and-index.html