Strange (for me) Scaffold source code generated

Hello :slight_smile:

I generated model, view and controler for products database table using scaffold

I try to change controler name from product to admin but I can't :frowning: (I didn't know how to specifi diferent controler name when use scaffold)

I controllers/s_controller.rb to controllers/admin_controller.rb view/products directory to view admin directory layout/products.html.erb to layout/admin.html.erb and make some modifications

but i can't do it because there are some strange thinks

view\products\index.html     <td><%= link_to 'Show', product %></td>     <td><%= link_to 'Edit', edit_product_path(product) %></td>     <td><%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %></td>

what are these edit_product_path functions? And why edit link is something like     <td><a href="/products/1/edit">Edit</a></td> and not     <td><a href="/products/edit/1">Edit</a></td>

when i try to make /admin/1/edit request I get an error that I have not action 1, it works only with /admin/edit/1

in products controler it works both ways: /products/1/edit and /products/edit/1/

Can you help me, pls :slight_smile:

If I have to short my question it is:

view/products/index.html.erb

<h1>Listing products</h1>

<table>   <tr>     <th>Title</th>     <th>Description</th>     <th>Image url</th>   </tr>

<% for product in @products %>   <tr>     <td><%=h product.title %></td>     <td><%=h product.description %></td>     <td><%=h product.image_url %></td>     <td><%= link_to 'Show', product %></td>     <td><%= link_to 'Edit', edit_product_path(product) %></td>     <td><%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %></td>   </tr> <% end %> </table>

<br />

<%= link_to 'New product', new_product_path %>

what is this function edit_product_path and why the result is /1/edit and not /edit/1

And why both work?

???

<%= link_to 'New product', new_product_path %>

what is this function edit_product_path and why the result is /1/edit and not /edit/1

Short answer: restful routing. When you declare a route for products
in routes.rb this add a bunch of named routes, so new_product_path is
the url which gives you the path where the new product form is,
edit_product_path(some_product) is the url for editing some_product
etc...

And why both work?

because you still have the old controller/action/id routes in your
routes.rb file

Frederick Cheung wrote:

Ju Lian wrote:

Frederick Cheung wrote:

<%= link_to 'New product', new_product_path %>

what is this function edit_product_path and why the result is /1/edit and not /edit/1

Short answer: restful routing. When you declare a route for products in routes.rb this add a bunch of named routes, so new_product_path is the url which gives you the path where the new product form is, edit_product_path(some_product) is the url for editing some_product etc...

And why both work?

because you still have the old controller/action/id routes in your routes.rb file

Thank you very much :slight_smile:

Now I understand that I have to learn this: http://guides.rubyonrails.org/routing_outside_in.html

I still can't change controller name from products to admin

May be this is the right way (it works)