0

create アクションの前に使用したい 2 つのビューがあります。

最初のビューは add_sample_details.html.erb です

<% form_tag add_expt_details_samples_path :method => :post do %>
    <% for sample in @samples %>
        <% 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 %>
    <p><center><%= submit_tag "Next" %></center></p>

    <% for samp in @samples %>
        <%= hidden_field_tag("sample_ids[]", samp.id) %>
    <% end %>   
<% end %>

SamplesController では、add_expt_details は次のようになります。

def add_expt_details
    # Collect the samples that were sent
    @expt_samples = Sample.find(params[:sample_ids])
  end

add_expt_details.html.erb は次のようになります

<% form_for @expt_samples, :url => create_study_samples_path, :html => { :method => :put }  do |f| %>
    <% @expt_samples.each do |samp|%>
        <% f.fields_for :expts do |form| %>
        <%= form.label :experiment_title  %>
        <%= form.text_field :expt_title, :size => 15 %><br \>
        <% end %>
    <% end %>
    <p><center><%= submit_tag "Next" %></center></p>
<% end %>

私の create_study アクションはこのようなものです

def create_study
     @study = Study.new(params[:study])
     # this method collects all the samples from the add_sra_details view from the hidden_field_tag   
     if current_user.id?
       # Put the current user_id in the study.user_id
        @study.user_id = current_user.id       
       if @study.save # Save the values for the study  
          # Update the Sample attributes 
          @samples = Sample.update(params[:samples].keys, params[:samples].values).reject { |p| p.errors.empty? }
           # For all those sample_ids selected by the user, put the study ids in the sample_study_id
           @samples.each do |samp|     
             @study.samples << samp        
           end       

           # get the ids_sent from the add_expt_details
            @expt_samples = Sample.find(params[:id])             

           # A Flash message stating the details would be prefereable..! (Means you have to do it)
           flash[:success] = "Your Study has been Created"           
           redirect_to add_expt_details_samples_path
       else
           flash[:error] = "Study Faulty" 
           render :action => "add_sra_details"
       end
     end
  end

@expt_samples = Sample.find(params[:id]) を保持すると表示されるエラー メッセージは、「nil:NilClass の未定義のメソッド `keys'」です。

@expt_samples がない場合、「Couldn't Find id in Sample」というエラーが表示されます。

あるフォームから一連のサンプル ID を更新し、別のフォームで sample_ids に関連付けられた新しい Expt モデル レコードを作成する方法を提案できますか。

すべての提案を歓迎します。

乾杯

4

1 に答える 1

0

Railsのaccepts_nested_attributes_forを参照する必要があります

既存のオブジェクトをフォームにリンクする方法については、次の例を参照してください。

http://josemota.net/2010/11/rails-3-has_many-through-checkboxes/

rails 3 has_many :チェックボックス付きのフォームを介して

チェックボックスによる has_many

于 2012-05-02T11:44:05.833 に答える