Form_for with namespace

Hi,

I'm new to RoR (came over from PHP). I am working on the backend of my
project now, and I'm basically trying to output a form that lets me
create a new 'design'.

This is what I have in my routes.rb:
map.with_options(:namespace => "admin") do |admin|
  admin.resources :designs
end

In my design controller:
def new
  @design = Design.new
end

In my view for the form:
<% form_for([:admin, @design]) do |f| %>
<% end %>

When I attempt to view the form page, I get this error:
undefined method `admin_designs_path' for #<ActionView::Base:
0x589b760>

I've been following the official guides to a T, so I'm not really sure
where I've gone wrong. Anyone able to shed some light about this? Many
thanks.

Hi Bryan L wrote:

This is what I have in my routes.rb:
map.with_options(:namespace => "admin") do |admin|
  admin.resources :designs
end

   You have to modify your routes as

map.namespace(:admin) do |admin|
       admin.resources :designs
end

   And also generate controller and model like
script/generate controller Admin::Designs
script/generate model Design #field parameters here

Sijo

Thanks Sijo for the help. I've made the changes according to your
suggestions. The error message is now different, but I guess there's
some improvement!

"undefined method `^' for "f":String"

My routes.db:
  map.namespace(:admin) do |admin|
    admin.resources :designs
  end

Any ideas??

If the error occurred on that line then it suggests @design is nil
(@design is not a model it is a variable). You should set this up in
your 'new' action before displaying the view. Something like @design
= Design.new.

If this does not make sense then, if you have not done so already,
have a look at the rails guide Getting Started. See
http://guides.rubyonrails.org/

Colin

Thanks Coiln. I deleted that message actually because it slipped my
mind that the line which I defined @design as a Design model got
deleted off when I regenerated the controllers and models. I fixed
that already so now I'm stuck with another different undefined method
error:
undefined method `^' for "f":String

Where does this ^ come from? I've tried searching through Google and
other ruby forums but seems like I'm the only one having so much
trouble. I guess it might be just something obvious that I just can't
get for some reason..!

Thanks Coiln. I deleted that message actually because it slipped my
mind that the line which I defined @design as a Design model got
deleted off when I regenerated the controllers and models. I fixed
that already so now I'm stuck with another different undefined method
error:
undefined method `^' for "f":String

Where does this ^ come from? I've tried searching through Google and
other ruby forums but seems like I'm the only one having so much
trouble. I guess it might be just something obvious that I just can't
get for some reason..!

I think a lot of people have had this problem, I believe it is a known
bug in Rails 2.3.4. I understand the easiest solution is to go down
to 2.3.3 if possible.

Colin

What about generating normal forms? I can't seem to do it without
errors.

<% form_tag do(:method => "get") %>
Doing this is fine...

<% form_tag do %>
But this gives me the Undefined Method '^' error once more.

Not sure why, but the only difference is that one is a get request,
the other is a post. Surely this can't be broken as well? Seems like
it may be one of the most basic functions in Rails, and if it were to
be broken, too many people would have been affected by it already.

I think it is only an issue with Ruby 1.9 (with rails 2.3.4), but this
is only from memory, think a bit more googling (or searching the
archives of this list) would be needed to confirm this.

Colin

To anyone who is experiencing this problem, there's a patch to rectify
this already.

https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234

The latest master branch at github should fix this too! Phew...