No route matches controller - scaffold generated code

70 views
Skip to first unread message

bobtr

unread,
Nov 14, 2010, 6:38:35 PM11/14/10
to Ruby on Rails: Talk
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

======

chris

unread,
Nov 15, 2010, 1:49:07 PM11/15/10
to Ruby on Rails: Talk
On Nov 14, 6:38 pm, bobtr <bobt...@gmail.com> wrote:
> rails g scaffold dog dog_id:integer color:string gender:string
> dog_name:string --skip-migration

Since you put --skip-migration, could you post table structure? Maybe
missing an ID or some other field? Reserved word bug? Sometimes I've
had to restart ruby server when working with routes.rb, but shouldn't
be necessary with a fresh scaffold. Problem does seem related to
routes.rb, I bet using:action controller and id in link_to() would work

Marnen Laibow-Koser

unread,
Nov 15, 2010, 1:53:34 PM11/15/10
to rubyonra...@googlegroups.com
chris wrote in post #961631:

> On Nov 14, 6:38pm, bobtr <bobt...@gmail.com> wrote:
>> rails g scaffold dog dog_id:integer color:string gender:string
>> dog_name:string --skip-migration
>
> Since you put --skip-migration, could you post table structure?
[...]

More to the point, why did you skip the migration?

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

--
Posted via http://www.ruby-forum.com/.

Bob T.

unread,
Nov 15, 2010, 2:20:44 PM11/15/10
to rubyonra...@googlegroups.com
Here is the table definition from the generated schema.rb

create_table "dogs", :primary_key => "dog_id", :force => true do |t|
t.string "color", :limit => 20
t.string "gender", :limit => 20
t.string "dog_name", :limit => 20
end


I used skip-migration because the table already exists in mysql.
When I move from learning mode to development mode, I will need to write
code against existing databases, so I can't maintain the database source
code in ruby.

Bob T.

unread,
Nov 15, 2010, 2:25:37 PM11/15/10
to rubyonra...@googlegroups.com
chris wrote in post #961631:
> routes.rb, I bet using:action controller and id in link_to() would work

If you would kindly give me an exact syntax, I'd be like to try it.

I would, however, like to understand why the generated code does not
work.

Marnen Laibow-Koser

unread,
Nov 15, 2010, 3:37:17 PM11/15/10
to rubyonra...@googlegroups.com
Bob T. wrote in post #961643:

That's not quite true. You need to learn about rake db:schema:dump.

Anyway, you should be using migrations wherever possible, especially as
you learn.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

--
Posted via http://www.ruby-forum.com/.

Bob T.

unread,
Nov 15, 2010, 4:10:46 PM11/15/10
to rubyonra...@googlegroups.com
Marnen Laibow-Koser wrote in post #961663:

>>
>> I used skip-migration because the table already exists in mysql.
>> When I move from learning mode to development mode, I will need to write
>> code against existing databases, so I can't maintain the database source
>> code in ruby.
>
> That's not quite true. You need to learn about rake db:schema:dump.

Let me rephrase .. I don't want to depend on ruby for schema
definition, even if it can do it.

Anyway, I did the migrate separately, like this:
rake db:migrate

It brought all the table definitions over from my mysql database.


>
> Anyway, you should be using migrations wherever possible, especially as
> you learn.

--
Posted via http://www.ruby-forum.com/.

chris

unread,
Nov 15, 2010, 4:13:52 PM11/15/10
to Ruby on Rails: Talk
That's the problem:

On Nov 15, 2:20 pm, "Bob T." <li...@ruby-forum.com> wrote:
>   create_table "dogs", :primary_key => "dog_id", :force => true do |t|

I got a similar error under 2.3.8 with your schema. AR expects ID to
be called 'id', you can override it in the model or this would work:

create_table :dogs' do |t|
t.string "color", :limit => 20
t.string "gender", :limit => 20
t.string "dog_name", :limit => 20
end

I would also recommend using migrations. Sometimes it feels like
adding a layer of abstraction for it's own sake, but in the long run
it is a great idea.

Colin Law

unread,
Nov 15, 2010, 4:18:10 PM11/15/10
to rubyonra...@googlegroups.com

Did you put
set_primary_key "dog_id"
in the the dog model?

Colin

Marnen Laibow-Koser

unread,
Nov 15, 2010, 5:13:42 PM11/15/10
to rubyonra...@googlegroups.com
Bob T. wrote in post #961668:

> Marnen Laibow-Koser wrote in post #961663:
>>>
>>> I used skip-migration because the table already exists in mysql.
>>> When I move from learning mode to development mode, I will need to write
>>> code against existing databases, so I can't maintain the database source
>>> code in ruby.
>>
>> That's not quite true. You need to learn about rake db:schema:dump.
>
> Let me rephrase .. I don't want to depend on ruby for schema
> definition, even if it can do it.

Why not? IMHO you are making a huge mistake. The advantages of having
Rails manage your DB schema are many -- the app knows what it wants in
the DB; you can have your DB schema in version control with your source
code; changes to the schema are no longer difficult.

>
> Anyway, I did the migrate separately, like this:
> rake db:migrate
>
> It brought all the table definitions over from my mysql database.

How could it do that? rake db:migrate only executes your migration
files.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

--
Posted via http://www.ruby-forum.com/.

Bob T.

unread,
Nov 15, 2010, 6:07:05 PM11/15/10
to rubyonra...@googlegroups.com
# Here is the solution....

class Dog < ActiveRecord::Base
set_primary_key "dog_id"
end

Bob T.

unread,
Nov 15, 2010, 6:15:08 PM11/15/10
to rubyonra...@googlegroups.com
Someone else found this before I saw yours, but that is the problem.
I assumed that scaffold would know what the primary key is , because it
was identified in the migrated schema:

schema.rb

create_table "dogs", :primary_key => "dog_id", :force => true do |t|
t.string "color", :limit => 20
t.string "gender", :limit => 20
t.string "dog_name", :limit => 20
end


Thanks for your help!

Colin Law wrote in post #961671:

--
Posted via http://www.ruby-forum.com/.

Bob T.

unread,
Nov 15, 2010, 6:20:02 PM11/15/10
to rubyonra...@googlegroups.com
Regarding migrations -

We use Oracle, MySql , PHP and are just considering using RoR.

If we choose to develop some things in RoR, it will have to learn to get
along with the code and the database tables we already have.

If you use only one technology, I understand why you would recommend
using that technology exclusively. Personally, I don't believe in
getting locked into a particular technology. Thats my choice.

Marnen Laibow-Koser

unread,
Nov 15, 2010, 6:46:16 PM11/15/10
to rubyonra...@googlegroups.com
Bob T. wrote in post #961705:
> Regarding migrations -

Please quote when replying.

>
> We use Oracle, MySql , PHP, Perl/DBI and are just considering using RoR.


>
> If we choose to develop some things in RoR, it will have to learn to get
> along with the code and the database tables we already have.

And so it can. But you should dump the schema into the schema file as I
already suggested.

>
> If you use only one technology, I understand why you would recommend
> using that technology exclusively. Personally, I don't believe in
> getting locked into a particular technology. Thats my choice.

I don't either. But while you're developing in Rails, you should use
Rails migrations.

It's not great practice to have multiple applications touching the same
DB anyway.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

--
Posted via http://www.ruby-forum.com/.

arga aridarma

unread,
Nov 15, 2010, 7:09:05 PM11/15/10
to rubyonra...@googlegroups.com
Dear all,
This is a repost of my question, because the first post is considered as thread
hijack.
I have changed the title, hopefully this time it's not hijacking any threads :D

I have a silly problem in setting up a relationship between 4 models.

I set these 4 models, ComUser, DefJabatan, DefUserRole, DefKelamin. In each
model with name started with 'Def', i put a has_one:ComUser relationship.
So naturally i have 3 belongs_to relationship in ComUser.
I do a simple query in the controller: @users = ComUser.find(:first)
and in the view, i simply put a object debug: <%=debug(@users)%>

and I get this:

--- !ruby/object:ComUser
attributes:
def_jabatan_id: "1"
created_at: 2010-11-16 04:31:35
def_user_role_id: "1"
gsm: "-"
updated_at: 2010-11-16 04:31:35
alamat: "-"
username: admin
id: "1"
def_kelamin_id: "1"
password: admin
online_status: "2"
attributes_cache: {}

I'm getting a feeling that I didn't set the relationship right, because i don't
see any attributes addition in the ComUser from the model started with
Def-something that i create above..

Am I missing something here, like violating a naming convention or something?

I even tries to alter the table by implicitly put a foreign key in the table for
ComUser model using sql statements, and the debug result is still the same.
How can i make this relationship work?

Thanks

PS. I put the code snippet that i use for migrating the database and defining
the relationship below.

Regards,
Arga


ComUser < ActiveRecord::Base
belongs_to :DefKelamin
belongs_to :DefUserRole
belongs_to :DefJabatan
Migration:
create_table :com_users do |t|
t.timestamps
t.references :def_jabatan, :null => false
t.integer :def_kelamin_id, :null => false
t.references :def_user_role, :null => false
t.column :username,'varchar(20)', :null => false
t.column :password,'varchar(20)', :null => false
end

DefJabatan < ActiveRecord::Base
has_one:ComUser
Migration:
create_table :def_jabatans do |t|
t.timestamps
t.column :jabatan,'varchar(20)', :null => false
end

DefUserRole < ActiveRecord::Base
has_one:ComUser
Migration:
create_table :def_user_roles do |t|
t.timestamps
t.column :role,'varchar(20)', :null => false
t.string :description, :null => false
t.string :icon
end

DefKelamin < ActiveRecord::Base
has_one :ComUser
Migration:
create_table :def_kelamins do |t|
t.timestamps
t.column :kelamin,'varchar(10)', :null => false
end


Marnen Laibow-Koser

unread,
Nov 15, 2010, 7:44:15 PM11/15/10
to rubyonra...@googlegroups.com
arga aridarma wrote in post #961713:

> Dear all,
> This is a repost of my question, because the first post is considered as
> thread
> hijack.
> I have changed the title, hopefully this time it's not hijacking any
> threads :D

Still hijacking. Please start a new thread.

Brian Troutwine

unread,
Nov 15, 2010, 9:50:10 PM11/15/10
to rubyonra...@googlegroups.com
On Mon, Nov 15, 2010 at 7:44 PM, Marnen Laibow-Koser
<li...@ruby-forum.com> wrote:
> arga aridarma wrote in post #961713:
>> Dear all,
>> This is a repost of my question, because the first post is considered as
>> thread
>> hijack.
>> I have changed the title, hopefully this time it's not hijacking any
>> threads :D
>
> Still hijacking.  Please start a new thread.

What are you talking about? I'm reading this via the mailing list; on
this end of things _both_ of arga's mails are hijacking nothing.

> Best,
> --
> Marnen Laibow-Koser
> http://www.marnen.org
> mar...@marnen.org
>
> --
> Posted via http://www.ruby-forum.com/.
>

> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>

Erol Fornoles

unread,
Nov 15, 2010, 9:53:43 PM11/15/10
to rubyonra...@googlegroups.com
On Tue, Nov 16, 2010 at 10:50 AM, Brian Troutwine <br...@troutwine.us> wrote:
On Mon, Nov 15, 2010 at 7:44 PM, Marnen Laibow-Koser
<li...@ruby-forum.com> wrote:
> arga aridarma wrote in post #961713:
>> Dear all,
>> This is a repost of my question, because the first post is considered as
>> thread
>> hijack.
>> I have changed the title, hopefully this time it's not hijacking any
>> threads :D
>
> Still hijacking.  Please start a new thread.

What are you talking about? I'm reading this via the mailing list; on
this end of things _both_ of arga's mails are hijacking nothing.

If you check via Google Groups, it did.

--
Erol M. Fornoles

Brian Troutwine

unread,
Nov 15, 2010, 10:03:03 PM11/15/10
to rubyonra...@googlegroups.com
On Mon, Nov 15, 2010 at 9:53 PM, Erol Fornoles <erol.f...@gmail.com> wrote:
> On Tue, Nov 16, 2010 at 10:50 AM, Brian Troutwine <br...@troutwine.us>
> wrote:
>>
>> On Mon, Nov 15, 2010 at 7:44 PM, Marnen Laibow-Koser
>> <li...@ruby-forum.com> wrote:
>> > arga aridarma wrote in post #961713:
>> >> Dear all,
>> >> This is a repost of my question, because the first post is considered
>> >> as
>> >> thread
>> >> hijack.
>> >> I have changed the title, hopefully this time it's not hijacking any
>> >> threads :D
>> >
>> > Still hijacking.  Please start a new thread.
>>
>> What are you talking about? I'm reading this via the mailing list; on
>> this end of things _both_ of arga's mails are hijacking nothing.
>
> If you check via Google Groups, it did.

Huh.

Erol Fornoles

unread,
Nov 15, 2010, 10:13:22 PM11/15/10
to rubyonra...@googlegroups.com
On Tue, Nov 16, 2010 at 11:03 AM, Brian Troutwine <br...@troutwine.us> wrote:
> If you check via Google Groups, it did.

Huh.

Link to the original thread, which was originally titled "No route matches controller - scaffold generated code"


Brian Troutwine

unread,
Nov 15, 2010, 10:54:35 PM11/15/10
to rubyonra...@googlegroups.com
On Mon, Nov 15, 2010 at 10:13 PM, Erol Fornoles <erol.f...@gmail.com> wrote:
> On Tue, Nov 16, 2010 at 11:03 AM, Brian Troutwine <br...@troutwine.us>
> wrote:
>>
>> > If you check via Google Groups, it did.
>>
>> Huh.
>
> Link to the original thread, which was originally titled "No route matches
> controller - scaffold generated code"
> http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ff7ff1c1dd447e90

Clearly Google Groups does more leg-work compared to Gmail in keeping
threads together. I was rather as confused as arga. Sorry, all.

arga aridarma

unread,
Nov 16, 2010, 1:51:48 AM11/16/10
to rubyonra...@googlegroups.com
Oh. So that's the problem. :-)
Ok guys. Thanks for the info. I'll repost the question again later. This time i'll make sure it's a new message, not the replied one.

Thanks again.

Regards,
Arga

Reply all
Reply to author
Forward
0 new messages