I am using the Rails 2.0 pre-release and trying to replicate the
method used by Jamis to create a company, person, and then display the
nested xml using .to_xml as shown here:
Buckblog: Web services, Rails-style.
However, I get the following error:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.delete
I can see that all my parameters are passing in correctly from the
form:
{"company"=>{"name"=>"company"},
"commit"=>"Create",
"title"=>"wacky",
"authenticity_token"=>"7f3e6aaaba34fd8146ce244c2038797ebb1f1593",
"first_name"=>"Ryan",
"last_name"=>"Riley"}
I was pretty certain this came in as an array, so I’m not sure why I’m
getting an error saying it is not. Here’s the relevant controller and
view code:
PeopleController.rb
# POST /contacts/people
# POST /contacts/people.xml
def create
company = params[:person].delete(:company)
@company = Company.find_or_create_by_name(company[:name])
@person = @company.people.build(params[:person])
respond_to do |format|
if @person.save
flash[:notice] = 'Person was successfully created.'
format.html { redirect_to(contacts_person_path(@person)) }
format.xml { render :xml => @person.to_xml( :include =>
@company ), :status => :created, :location => @person }
else
format.html { render :action => "new" }
format.xml { render :xml => @person.errors, :status
=> :unprocessable_entity }
end
end
end
new.html.erb
New person
<%= error_messages_for :person %>
<% form_tag([:contacts, @person]) do %>
First name
<%= text_field_tag :first_name %>
Last name
<%= text_field_tag :last_name %>
Title
<%= text_field_tag :title %>
Company
<%= text_field_tag "company[name]" %>
<%= submit_tag "Create" %>
<% end %>
<%= link_to 'Back', contacts_people_path %>