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!