当前位置: 动力学知识库 > 问答 > 编程问答 >

ruby on rails - Find ID does not find the id and create

问题描述:

I have a 2 views that I want to use before the create action.

1st view is 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 %>

in the SamplesController, the add_expt_details looks like this

def add_expt_details

# Collect the samples that were sent

@expt_samples = Sample.find(params[:sample_ids])

end

and the add_expt_details.html.erb looks like this

<% 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 %>

and my create_study action is like this

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

The error message I get when I keep the @expt_samples = Sample.find(params[:id]) is "undefined method `keys' for nil:NilClass"

and If I dont have the @expt_samples, it gives me an error "Couldn't Find id in Sample"

Can some one suggest how can I update set of sample ids from one form and also create new Expt model records that are associated to the sample_ids in another form.

All suggestions are appreciated.

Cheers

网友答案:

You need to refer to Rails' accepts_nested_attributes_for

To see how to link existing objects with forms, you can see examples here:

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

rails 3 has_many :through Form with checkboxes

has_many through checkboxes

分享给朋友:
您可能感兴趣的文章:
随机阅读: