Rails Routing Incorrectly links to show.html -


i'm learning rails , have encountered behavior don't understand. i'm trying create simple crud app. on 'new' view after data entry fields , submit button trying add link go page (i'll call 'fnord').

instead of linking fnord, it's going show.html. given rails convention based wonder if default behavior of kind, haven't been able figure out triggers or proper way of routing fnord.

this rails 3.2.21, ruby 1.9.3. generated model, views , controller using scaffold , started tweaking things.

here's controller (minus unrelated actions - index, destroy, etc):

class employeescontroller < applicationcontroller    def show     @employee = employee.find(params[:id])      respond_to |format|       format.html # show.html.erb       format.json { render json: @employee }     end   end    def new     @employee = employee.new      respond_to |format|       format.html # new.html.erb       format.json { render json: @employee }     end   end    def fnord     #nothing yet - trying page appear right   end 

here's relevant code new.html.erb:

<h2>new employee</h2> <%= render 'form' %>  <!-- content, data entry fields, submit button, etc -->  <div>   <%= link_to 'fnord', employees_fnord_path %> <div/> 

here's view, fnord.hmtl.erb:

<h2>fnord</h2> <br/> <p>this fnord.html</p> 

here's routes.rb:

myapp::application.routes.draw   resources :employees     'employees/fnord'   root :to => 'employees#new'   end 

i ran 'rake routes' , following output:

       employees    /employees(.:format)          employees#index                  post   /employees(.:format)          employees#create     new_employee    /employees/new(.:format)      employees#new    edit_employee    /employees/:id/edit(.:format) employees#edit         employee    /employees/:id(.:format)      employees#show                  put    /employees/:id(.:format)      employees#update                  delete /employees/:id(.:format)      employees#destroy  employees_fnord    /employees/fnord(.:format)    employees#fnord             root        /                             employees#new 

as far can see looks right, when click on link in new.html returns show.html, not fnord.html.

the url shows in browser locahost:3000/employees/fnord, content show.html.

i read routing documentation (http://guides.rubyonrails.org/routing.html) didn't see explanations.

i've tried restarting rails (many times) , clearing browser cache , steps didn't help.

can enlighten me i'm missing? thank much.

the route /employees/fnord matches show route because show route looking url's in format: /employees/:id

when go /employees/fnord interprets fnord id of employee, , routes show method.

one way fix declare /employees/fnord route before resources routes, matches first:

myapp::application.routes.draw   'employees/fnord'   resources :employees     root :to => 'employees#new'   end 

another way change name of url doesn't match pattern of /employees/:id:

myapp::application.routes.draw   resources :employees     'employees1/fnord', to: 'employees#fnord'   # or whatever   'foo', to: 'employees#fnord'   # etc...   'employees/foo/fnord', to: 'employees#fnord'   root :to => 'employees#new'   end 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -