I''m just starting to use forms and I''m stuck. I''m
working with two
models:
class Department < ActiveRecord::Base
has_many :employees
end
class Employee < ActiveRecord::Base
belongs_to :department
end
I can create records just fine. When I go back to edit them, I get
the message
Couldn''t find <Class> without an ID, where <Class> is
either
Department or Employee.
My department controller contains these methods:
def create
@department = Department.new(params[:department])
if @department.save
flash[:notice] = ''Department was successfully created.''
redirect_to :action => ''list''
else
render :action => ''new''
end
end
def edit
@department = Department.find(params[:id])
@managers = Employee.find(:all,
:order => ''last_name,
first_name'',
:conditions => "manager = 1").map
{|
m|
[#{m.last_name},
#{m.first_name}" , m.id]}
render :layout => ''isis-form''
end
def update
breakpoint
@department = Department.find(params[:id])
if @department.update_attributes(params[:department])
flash[:notice] = ''Department was successfully updated.''
redirect_to :action => ''show'', :id => @department
else
render :action => ''edit''
end
end
The layout simply wraps the form in a <div>, which supplies some
formatting, and a <fieldset>.
My form partial is:
<%= error_messages_for ''department'' %>
<% @form_action = set_form_action(@params[:action]) %>
<% logger.debug "params[action] = #{@params[:action]}" %>
<% logger.debug "form_action in form = #{@form_action}" %>
<% breakpoint %>
<!--[form:department]-->
<% form_for :department, :url => { :action => @form_action } do |form|
%>
<p>
<label for="department_name">Name:</label>
<%= form.text_field :name %>
</p>
<p>
<label for="department_manager_id">Manager:</label>
<%= form.select :manager_id, @managers %>
</p>
<p>
<span class="submit"><%= submit_tag set_submit_tag_text(
@params[:action])
%></span>
</p>
<% end %>
<!--[eoform:department]-->
The set_form_action and set_submit_tag_text methods just set
the :action and button text depending on the action that calls the
form. The logger messages show me that :action => @form_action is
getting set to "update".
I can see from the breakpoints that params[:id] is set properly when I
enter the from from the edit action and that it doesn''t exist at all
when I get to the update action. All the form fields are carried over
properly, but :id isn''t.
I have exactly the same problem with the employee form, which I guess
isn''t surprising since I coded it the same way.
I''m sure I''ve just done something really dumb, but after
several hours
I still can''t see it and I can''t find any references that seem
to
describe this problem. Can somebody please tell me what I''m doing
wrong?
Thanks for taking the time to look at this.
-- Mike
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---