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
Post a Comment