Search code examples
ruby-on-railsroutesrefinerycms

RefineryCMS routes


I've got a RefineryCMS 2.1.2 app in which I've made an engine called properties. When I do a rake routes I get the following routes available

                        email_properties_property POST   /properties/:id/email(.:format)                                 refinery/properties/properties#email
                            properties_properties GET    /properties(.:format)                                           refinery/properties/properties#index
                              properties_property GET    /properties/:id(.:format)                                       refinery/properties/properties#show
     update_positions_properties_admin_properties POST   /refinery/properties/update_positions(.:format)                 refinery/properties/admin/properties#update_positions
                      properties_admin_properties GET    /refinery/properties(.:format)                                  refinery/properties/admin/properties#index
                                                  POST   /refinery/properties(.:format)                                  refinery/properties/admin/properties#create
                    new_properties_admin_property GET    /refinery/properties/new(.:format)                              refinery/properties/admin/properties#new
                   edit_properties_admin_property GET    /refinery/properties/:id/edit(.:format)                         refinery/properties/admin/properties#edit
                        properties_admin_property PUT    /refinery/properties/:id(.:format)                              refinery/properties/admin/properties#update
                                                  DELETE /refinery/properties/:id(.:format)                              refinery/properties/admin/properties#destroy
                       properties_property_images GET    /properties/property_images(.:format)                           refinery/properties/property_images#index
                        properties_property_image GET    /properties/property_images/:id(.:format)                       refinery/properties/property_images#show
update_positions_properties_admin_property_images POST   /refinery/properties/property_images/update_positions(.:format) refinery/properties/admin/property_images#update_positions
                 properties_admin_property_images GET    /refinery/properties/property_images(.:format)                  refinery/properties/admin/property_images#index
                                                  POST   /refinery/properties/property_images(.:format)                  refinery/properties/admin/property_images#create
              new_properties_admin_property_image GET    /refinery/properties/property_images/new(.:format)              refinery/properties/admin/property_images#new
             edit_properties_admin_property_image GET    /refinery/properties/property_images/:id/edit(.:format)         refinery/properties/admin/property_images#edit
                  properties_admin_property_image PUT    /refinery/properties/property_images/:id(.:format)              refinery/properties/admin/property_images#update
                                                  DELETE /refinery/properties/property_images/:id(.:format) 

If I try to use something like this in my controller though it fails

@property = Property.find(params[:id])
redirect_to properties_property_path(@property)

It is getting the property correctly it's just not finding the route. Here is the error

undefined method `properties_property_path' for #<Refinery::Properties::PropertiesController:0x007fcf298a3b58>

Solution

  • Because of Rails' engine isolation, you will have to use the following:

    @property = Property.find(params[:id])
    redirect_to refinery.properties_property_path(@property)
    

    This ensures that you're accessing the route from under Refinery's routing helpers (which is where it lives), and not your Rails application's routes.