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 => @company.id %>

which produces the link

http://my-server-name/people/by_company?company_id=1

However, it errors with

Couldn't find Person with ID=by_company
{"id"=>"by_company",
"company_id"=>"1"}

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

Thanks!

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'
end'

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 => @company.id %>

which created the link

http://my-server-name/people/by_company/1

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] )
end

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

Or a named scope - some things to look at.

Hope this helps

sure,

if you wanted to name it “:company_id=>@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

regards

Gotcha! Thanks for your assistance!