Link to home
Create AccountLog in
Avatar of bobtreu
bobtreuFlag for United States of America

asked on

Ruby on Rails : "No route matches controller"

I am new to RoR, but I have been struggling with a mysterious error for days.
I am using a standard installation approach on a clean ubuntu system

I created a very simple application, just reading from a mysql table called dogs.
The application was totally generated with scaffold.

rails server -p 3001   #Starts server


When I run, I get the error "No route matches controller"
   http://localhost:3001/dogs  

If I remove all the link_to cells, the application runs and returns data.

If I put back just one line "    <td><%= link_to 'Show', dog %></td>",
 I still get the error complaining about the  ":action=>"destroy" route.


== scaffold ==

rails g scaffold dog dog_id:integer color:string gender:string dog_name:string --skip-migration


===========Generated Source Code=============

<% @dogs.each do |dog| %>
  <tr>
    <td><%= dog.dog_id %></td>
    <td><%= dog.color %></td>
    <td><%= dog.gender %></td>
    <td><%= dog.dog_name %></td>
    <td><%= link_to 'Show', dog %></td>
    <td><%= link_to 'Edit', edit_dog_path(dog) %></td>
    <td><%= link_to 'Destroy', dog, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>

========= ERROR ===========
## No route matches controller ############
Showing /home/ruby/hub2/app/views/dogs/index.html.erb where line #20 raised:
No route matches {:controller=>"dogs", :action=>"destroy", :id=>#<Dog dog_id: 1, color: "Golden", gender: "Female", dog_name: "Daisy">}

Extracted source (around line #20):

17:     <td><%= dog.color %></td>
18:     <td><%= dog.gender %></td>
19:     <td><%= dog.dog_name %></td>
20:     <td><%= link_to 'Show', dog %></td>
21:     <td><%= link_to 'Edit', edit_dog_path(dog) %></td>
22:     <td><%= link_to 'Destroy', dog, :confirm => 'Are you sure?', :method => :delete %></td>
23:   </tr>

========== routes.rb   ==============
Hub2::Application.routes.draw do
  resources :dogs
end


========= rake routes ============
root@ubu-bob:/home/ruby/hub2# rake routes
(in /home/ruby/hub2)
    dogs GET    /dogs(.:format)          {:controller=>"dogs", :action=>"index"}
    dogs POST   /dogs(.:format)          {:controller=>"dogs", :action=>"create"}
 new_dog GET    /dogs/new(.:format)      {:controller=>"dogs", :action=>"new"}
edit_dog GET    /dogs/:id/edit(.:format) {:controller=>"dogs", :action=>"edit"}
     dog GET    /dogs/:id(.:format)      {:controller=>"dogs", :action=>"show"}
     dog PUT    /dogs/:id(.:format)      {:controller=>"dogs", :action=>"update"}
     dog DELETE /dogs/:id(.:format)      {:controller=>"dogs", :action=>"destroy"}


=== Installation ===
 I followed these instructions on a brand new and fully updated version of ubuntu 10.04

 http://castilho.biz/blog/2010/05/08/how-to-install-ruby-on-rails-on-ubuntu-10-04-lucid-lynx/
 How to install Ruby on Rails on Ubuntu 10.04 Lucid Lynx
    Follow these steps to have a fresh installation of Ruby on Rails in Ubuntu 10.04:
   
  sudo su
  apt-get -y install build-essential
  apt-get -y install ruby rdoc libopenssl-ruby
  wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
  tar zxvf rubygems-1.3.7.tgz
  cd rubygems-1.3.7
  ruby setup.rb
  ln -s /usr/bin/gem1.8 /usr/local/bin/gem
  gem install rails  ;# (takes awhile with no output.. )
   
#Installing MySQL gem:
   
  apt-get -y install ruby-dev libmysql-ruby libmysqlclient-dev
  gem install mysql

======
Avatar of ostraaten
ostraaten

You are using named routes but these donlt exist or you are using them incorrectly. Instead named routes 'dog' try :controller => 'dogs', :action => 'show', :id => @dog or something. If that works try named routes. Do you have 'resource' in routes.rb
Avatar of bobtreu

ASKER

If what I have is wrong, then it was generated wrong by Scaffold.   If you can tell me what is wrong, I'd appreciate that.  

You suggested:
 "' try :controller => 'dogs', :action => 'show', :id => @dog "    or something.

The "or something"  throws me off a bit.    Are you suggesting that what scaffold generates is wrong?
I should use this in place of link_to?

You asked about the routes.rb file.   I included that in the original question.  

I also included the output from "rake routes"

Thanks for trying to help.
Avatar of bobtreu

ASKER

What I tried:   ( both with and without link_to )

<% @dogs.each do |dog| %>
  <tr>
    <td><%= dog.dog_id %></td>
    <td><%= dog.color %></td>
    <td><%= dog.gender %></td>
    <td><%= dog.dog_name %></td>
    <td><=% :controller => 'dogs', :action => 'show', :id => @dog %></td>
    <td><=% link_to :controller => 'dogs', :action => 'show', :id => @dog %></td>
  </tr>
<% end %>


What I see:

Dog       Color       Gender       Dog name                         
1       Golden       Female       Daisy       
 <=% :controller => 'dogs', :action => 'show', :id => @dog %>       
 <=% link_to :controller => 'dogs', :action => 'show', :id => @dog %>
ASKER CERTIFIED SOLUTION
Avatar of Andrew Doades
Andrew Doades
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account