>
>
> I need to use the model name 'Action' (which will not work in Rails
4.0.3) for business reasons (it's a product name). If I name the actual
model something else, is there any way to (maybe with mod_rewrite) make the
URL appear the way I need it to while keeping everything working in Rails?
>
> I've tried using the controller flag in routes.rb to try to fix this,
and it seems to work, but causes a lot of problems elsewhere -- basically
anything where I use the automatic URLs, like
>
> link_to 'Link text', @instance_var
>
>
> resources :foos, :as => :action ?
>
Thanks, I tried that first, and couldn't get the forms to work. What did
work was this (although it's quite a hack, routes-wise):
resources :fw_actions :as => :action
resources :fw_actions
The second line was required in order to support POST and PUT and DELETE,
so I may go through these and put :only => [:post, :put, :delete] on the
latter, and :without on the former.
I couldn't find any way to have form_for work in the absence of that
duplicate set of routes.
You can remove the second line. In order for form_for to work, you need to
manually set
the url instead of just form_for @instance_var. I've tested this out using
the following routes
resources :pages, as: :foo
which gave the following routes
foo_index GET /pages(.:format) pages#index
POST /pages(.:format) pages#create
new_foo GET /pages/new(.:format) pages#new
edit_foo GET /pages/:id/edit(.:format) pages#edit
foo GET /pages/:id(.:format) pages#show
PATCH /pages/:id(.:format) pages#update
PUT /pages/:id(.:format) pages#update
DELETE /pages/:id(.:format) pages#destroy
Try the following for your forms
# new action
form_for @instance_var, url: foo_index_path, html: { method: :post }
# edit
form_for @instance_var, url: foo_path(@instance_var), html: { method: :put }