嵌套属性has_many传递和收集id来构建模型

时间:2012-05-04 09:36:15

标签: ruby-on-rails nested-forms

我有这样的表格:

<% form_tag add_expt_details_samples_path, :method => :post do %>
    <% for sample in @samples %>
        <% if sample.study_id == @study.id %>
            <% fields_for "samples[]", sample do |form| %>
                <fieldset>
                    <legend>Sample Name: <%= sample.name %></legend>
                    <p><center><%= form.label :sample_title %>
                    <%= form.text_field :sample_title, :size => 25 %></center></p>
                    <table>
                        <tr>
                            <td>
                                <%= form.label :taxon_id %>
                                <%= form.text_field :taxon_id, :size => 15 %>
                            </td>
                            <td>
                                <%= form.label :scientific_name %>
                                <%= form.text_field :scientific_name, :size => 20 %>
                            </td>
                            <td>
                                <%= form.label :common_name %>
                                <%= form.text_field :common_name, :size => 15 %>
                            </td>
                        </tr>
                    </table>
                    <p>
                        <center>
                            <%= form.label :sample_descripition %><br \>
                            <%= form.text_area :description %>
                        </center>
                    </p>
                </fieldset>
             <% end %>
        <% end %>
    <% end %>
        <p><center><%= submit_tag "Next" %></center></p>
<% end %>

我想在add_expt_details动作中收集样本[],这样我就可以渲染一个post方法视图来为样本[] id添加新的模型记录。

我的行动如下

def add_expt_details
    # Collect the samples that were sent
    @expt_samples = Sample.find(params[:samples])
    # @expt_samples.each do |samp|
    #   samp.expts.build
    # end
  end

然后将它们发送到创建操作,其中更新样本详细信息并可以创建expt值。

def create_study
    @samples = Sample.update(params[:samples].keys, params[:samples].values).reject { |p| p.errors.empty? }
      if @samples.empty? 
        flash[:notice] = "Samples updated"
        redirect_to :action => "add_expt_details", :anchor => "ok"
      else
        render :action => 'edit_individual'
      end
  end

有没有办法实现这一点,我使用了accepted_nested_attributes_for:expts,:dependent =&gt; :破坏。但我似乎错了一些地方,我不想有一个有很多领域的表格。

我收到的错误消息是“未知密钥:3,6,12”

所有建议都表示赞赏。

0 个答案:

没有答案