Move to namespace

Hi,
I’ve built the Admin section of my project first, and would like to move
it
to its own Admin namespace.

I have four resources: Form, Element, Admin and User.

Old URL would be:

localhost:3000/forms

New URL would be:

localhost:3000/admin/forms

How do I migrate from one namespace to another?

After moving I want to create a second FormsController in the default
namespace.
I would then script/generate controller and script/generate view and
modify
as needed.

Looking forward to hear your thoughts about this.

CmdJohnson

On Sep 20, 8:02 pm, “Commander J.” [email protected]
wrote:

New URL would be:
Looking forward to hear your thoughts about this.

CmdJohnson

Create a folder named “admin” in the following directories:

  • app/controllers
  • app/helpers
  • app/views

Move the controllers, helpers and views which are to be namespaced to
the corresponding admin subdirectory.

You will need to edit the controllers that are namespaced. For
example:

Before: class FormsController < ApplicationController
After: class Admin::FormsController < ApplicationController

And do the same with your namespaced helpers.

Lastly, modify your routes.rb to reflect the namespaced resources:

map.namespace :admin do |admin|
admin.resources :forms
admin.resources :elements

end

HTH

I think I got it all wrong. You want a fast way of refactoring from
one namespace to another?

Your first post looks like it’s exactly what I need.
Moving from Default namespace to Admin namespace is what I wanted.
But if there is a faster way, please don’t hesitate to share.

Uh oh.

500 Internal Server Error
Because I already have a Controller named AdminController, I used the
namespace Backend.

I organized the files like you said in your first post. Every Controller
and
every Helper now looks like this:

class Backend::AdminController < ApplicationController

Any ideas?

On Sat, Sep 20, 2008 at 2:23 PM, Erol F. <[email protected]

On Sep 20, 9:57 pm, “Commander J.” [email protected]
wrote:

When I log in as admin, I get the error:

undefined method `form_path’ for #ActionView::Base:0x76ec1a

How do I make the *_path method understand what namespace we’re in?

CmdJohnson

You’ll need to point to the path of the controller. So for your
Backend::FormsController, the root route should be set as:

map.root :controller => “backend/forms”

Since Backend::FormsController resides on backend/forms.rb

Also, the path and url helpers for your namespaced controllers are now
named backend_{controller}_path. You can confirm this - and check out
all the other routes, as well - by running:

rake routes

I experimented with this line in routes.rb:
map.root :controller => :forms

instead of

map.root :controller => “forms”

That caused the 500 error.
Now that last statement is valid, but doesn’t work. How do I make the
root
path ‘/’ point to Backend::FormsController?

When I log in as admin, I get the error:

undefined method `form_path’ for #ActionView::Base:0x76ec1a

How do I make the *_path method understand what namespace we’re in?

CmdJohnson

On Sat, Sep 20, 2008 at 3:45 PM, Commander J. <

On Sep 21, 5:59 am, “Commander J.” [email protected]
wrote:

backend
admin
elements
forms
layouts
users

My controllers are now layout-less. Should the layouts dir be one higher?

You’ll need to append _url or _path for the url helpers to work. :wink:

Layouts are namespace agnostic. Specifying layout “backend” in your
Backend::ElementsController, for example, would load “app/views/
layouts/backend.erb” as that controller’s layout.

In one of my views I used to have the line:
<%= link_to ‘Show’, form %>

Which looked neat. According to ‘rake routes’, I should now be able to
use
backend_form:

backend_form GET /backend/forms/:id
{:controller=>“backend/forms”, :action=>“show”}

But that gives me:

undefined local variable or method `backend_form’ for
#ActionView::Base:0x19fae86

So now we have this:

<%= link_to ‘Show’, :controller=>“backend/forms”, :action=>“show” %>

Which works but is less neat.

My app/views directory looks like this:

backend
admin
elements
forms
layouts
users

My controllers are now layout-less. Should the layouts dir be one
higher?

On Sep 21, 8:18 am, “Commander J.” [email protected]
wrote:

undefined method `form_path’ for #ActionView::Base:0x1f25d83

If you want all your controllers to use the same layout, you could
just define it at application.rb, like:

class ApplicationController
layout “mylayout”

end

Try this form_for construct:

<% form_for @form, :url => {:action => “update”} do |f| %>

Or for new records:

<% form_for @form, :url => {:action => “create”} do |f| %>

HTH

Where do I place my layout so I don’t have to specify one explicitly?
I got this line of code:

<% form_for([:backend, @form]) do |f| %>

From here:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001740

But still get the error

undefined method `form_path’ for #ActionView::Base:0x1f25d83

On Sun, Sep 21, 2008 at 1:23 AM, Erol F. <[email protected]