Trouble passing :id of one model to another model

Hello,

I'm having trouble workign with two models, specifically passing the
id of my "Tools" model to New controller of my task model.

I am creating a page that keeps track of tools we are building in our
group. For each tool, there can be several tasks associated with
completing the code/process of the tool. I have a model for tool
("tools") and a model for tasks ("tooltasks"). On the tools view,
each tool is listed out in table format. Next to each tool is a
button/link called "add task". When the user clicks this button, I
would like to bring up the tooltasks#new view with the tool.id (or
just tool passed to the form). This is where its not working and i'm
stuck. Any help out there?

offending code:

---> tools main page = "index.html.erb"
<div id="tool-list">
<% for tool in @tools %>
<tr valign="top" class="<%=cycle("tool-line-odd","tool-line-even")
%>">
  <tr>
    <td width="15%" valign="top" class="tool-title"><%=link_to
tool.title, tool %></td>
    <td width="15%" valign="top" class="tool-title"><%=h
tool.description %></td>
    <td width="15%" valign="top" class="tool-title"><%=h tool.status
%></td>
    <td width="15%" valign="top" class="tool-title"><%=h tool.priority
%></td>
    <td width="15%" valign="top" class="tool-title"><%=h tool.owner
%></td>
    <td width="15%" valign="top" class="tool-title"><%=h tool.eta %></

    <td valign="top"><%= button_to 'Add Task', new_tooltask_path,:id
=> tool.id %></td>
    <td valign="top"><%= button_to 'Edit', edit_tool_path(tool) %></

    <td valign="top"><%= button_to 'Destroy', tool, :confirm => 'Are
you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>
</div>

tooltasks_controller.rb
     def new
         @tooltask = Tooltask.new

         # is this the problem???
         @tool = Tool.find(params[:id])

         respond_to do |format|
           format.html # new.html.erb
           format.xml { render :xml => @tooltask }
         end
     end

What's going on? What am I missing? thanks for any help

Dave

what's the error that's produced? What's the backtrace of the error?
What does the error message indicate is the offending line? I assume
you're getting a ActiveRecord::RecordNotFound exception. What are the
params being passed to your TooltasksController#new method? I'm
guessing that params[:id] is actually nil..

Try using:

new_tooltask_path(:tool_id => tool.id)

and in your controller:

@tool = Tool.find_by_id(params[:tool_id])

also remember to never call Class.find() without enclosing it within a
begin/rescue block, otherwise you'll raise an exception if no record
is found. Or use find_by_id and check to make sure that it actually
returns a record.

You could also look into nested routes if you want to make your urls
look prettier, since the above will generate something like:

tooltask/new?tool_id=1234

whereas with a nested route, you could use something like

tools/1234/tasks/new

Mike

Works like a dream! thanks Mike, and thanks for the advice!

Dave