How to get around a reserved word

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

needs to be rewritten to use the long-hand route helper, like this

  link_to 'Link text', action_path(@instance_var)

What am I missing here?

Thanks in advance,

Walter

Namespace it? Product::Action for the model, and product_action_path(@instance_var) in the routes.

resources :foos, :as => :action ?

Fred

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.

Walter

> > > 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 }