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 without an ID, where 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
formatting, and a .
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_for :department, :url => { :action => @form_action } do |form|
%>
Name: <%= form.text_field :name %>
Manager: <%= form.select :manager_id, @managers %>
<%= submit_tag set_submit_tag_text( @params[:action]) %>
<% end %>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