routes.rb and configuration over convention

24 views
Skip to first unread message

tydeas

unread,
Mar 14, 2012, 5:28:11 AM3/14/12
to Ruby on Rails: Talk
Hello there,
I am new to the rails framework. I have seen that rails uses the
"Convention over configuration" philosophy.
Then when I create a controller "post_controller" I have to actually
configure it in the routes.rb file to get it working. Is this the
other way around, configuration over convention?
I would expect that if the controller exist all his actions are
available to be executed, and more to go actions for crud would accept
the "conventional" method and have names like create, delete etc...
What do you think? Correct me if I am wrong in something.
Friendly and geeky,
Tydeas

Peter Vandenabeele

unread,
Mar 14, 2012, 6:55:44 PM3/14/12
to rubyonra...@googlegroups.com

Try this

peterv@e6500:~/b/projects/my_contacts$ rails generate resource foo
invoke active_record
create db/migrate/20120314225352_create_foos.rb
create app/models/foo.rb
invoke rspec
create spec/models/foo_spec.rb
invoke factory_girl
create spec/factories/foos.rb
invoke controller
create app/controllers/foos_controller.rb
invoke erb
create app/views/foos
invoke rspec
create spec/controllers/foos_controller_spec.rb
invoke assets
invoke coffee
create app/assets/javascripts/foos.js.coffee
invoke scss
create app/assets/stylesheets/foos.css.scss
route resources :foos
peterv@e6500:~/b/projects/my_contacts$ rails destroy resource foo
invoke active_record
remove db/migrate/20120314225352_create_foos.rb
remove app/models/foo.rb
invoke rspec
remove spec/models/foo_spec.rb
invoke factory_girl
remove spec/factories/foos.rb
invoke controller
remove app/controllers/foos_controller.rb
invoke erb
remove app/views/foos
invoke rspec
remove spec/controllers/foos_controller_spec.rb
invoke assets
invoke coffee
remove app/assets/javascripts/foos.js.coffee
invoke scss
remove app/assets/stylesheets/foos.css.scss
route resources :foos


This will also auto generate the correct routing line.
Note that you can use 'destroy' to remove all auto-created
files.

You might look into other rails generators with

$ rails generate

HTH,

Peter

Nicolas Sebrecht

unread,
Mar 15, 2012, 9:12:53 AM3/15/12
to rubyonra...@googlegroups.com, Nicolas Sebrecht

Convention is done the reverse way. Requesting for users/new will
execute method new of class UsersController in
controllers/user_controller.rb. All this naming is conventionnal.

BTW, I wouldn't expect to have routes automagically relying on
controllers because controllers often doesn't have routes attached.

--
Nicolas Sebrecht

tydeas

unread,
Mar 16, 2012, 11:07:18 AM3/16/12
to rubyonra...@googlegroups.com, Nicolas Sebrecht
That's what exactly I am trying to explain and think the issue is. You have convention on how to configure something where you should had convention to avoid configuration (at least when still in the beginning of your development process).
So let me describe what imho is proper convention over configuration in this case.
If I have a rb file in my controllers folder with is named *_controller, for example foo_controller,
then every method prefixed with action_* like action_bar is accessible through foo/bar.
This way I have a convention to avoid configuration in the first steps of my development. Then I can use routes.rb to change and configure.
Reply all
Reply to author
Forward
0 new messages