Silly little link_to question

I want to show a page that lists people that belong to a particular
company (each person has a company_id). My link_to looks like

<%= link_to "people", :controller => "people", :action =>
"by_company", :company_id => %>

which produces the link


However, it errors with

Couldn't find Person with ID=by_company

Why would the id be set to "by_company"? Shouldn't that be the


How do you have this on your routes file?

Routes file:

ActionController::Routing::Routes.draw do |map|
  map.resources :people
  map.resources :users
  map.root :controller => "homepage"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

Well, I got around it, but I'd like to know why the original way
didn't work because I'm certain this will come up again. Here's what
I did:

I changed the link_to to be

<%= link_to "people", :controller => "people", :action =>
"by_company", :id => %>

which created the link


Thanks for looking at this. I'm sure this is a very easy question for
someone who has done this a while, but that would not (yet) be me :slight_smile:

What do you have in your by_company method?

looks like you had in your find statement - params[:id] and it should
have been params[:company_id]

You might take a look at generating a class method in your model file:

def self.by_company( anId )
   find(:all, :conditions => ["company_id = ?", anId] )

The you can refer to this by Model_name.by_company( x )

Or a named scope - some things to look at.

Hope this helps


if you wanted to name it “:company_id=>
then in the routes file you would have to do

map.connect ‘:controller/:action/:company_id’

or else it will interpet as one cgi query parameter


Gotcha! Thanks for your assistance!