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)