Forum: Ruby on Rails [noob question] View error, Resource route

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Paul A. (Guest)
on 2009-04-20 11:07
Hello everyone,

I have a little problem, since I have change my route from resources to
resource. My files look like:

# config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resource :system
end

# app/controllers/systems_controller.rb
class SystemsController < ApplicationController
  def new
    @system = System.new
  end
end

# app/views/systems/new.html.erb
<% form_for @system do |f| %>
<%= f.error_messages %>

And here is my error message:

NoMethodError in Systems#new

Showing app/views/systems/new.html.erb where line #1 raised:

undefined method `systems_path' for #<ActionView::Base:0x3459fe0>
Extracted source (around line #1):

1: <% form_for @system do |f| %>
2: <%= f.error_messages %>
3:
4: <dl>
RAILS_ROOT: /Users/pulu/Sites/test

Do you think I get an error in new.html.erb?

Thanks
Gavin M. (Guest)
on 2009-04-20 12:19
(Received via mailing list)
try...
<% form_tag system_path do %>


using @system is a shortcut way of writing systems_path but it looks
for the plural path - you've set yours to a singular resource path

run "rake routes" to see your available paths in the terminal window.

Hope that helps

On Apr 20, 8:07 am, "Paul A." <removed_email_address@domain.invalid>
Paul A. (Guest)
on 2009-04-20 13:14
Gavin M. wrote:
> try...
> <% form_tag system_path do %>

Thanks, Gavin. When I do this, I get an error at the line 2 about:
<%= f.error_messages %>

To solve it, I had just rewrite this line with:
<%= error_messages %>

But an other error message is occuring, saying that "error_messages" is
not defined (if I remember well).
Gavin M. (Guest)
on 2009-04-20 14:18
(Received via mailing list)
Sorry - should have explained:

If you use the form_tag method then you can't pass a variable like |f|

you'd have to replace things like
f.text_field :your_field

with

text_field :system, :your_field

and use the error_messages_for method instead:
http://api.rubyonrails.org/classes/ActionView/Help...

I think you can use form_for as you did before but write it like:

<% form_for :system, :url => {:action => :create} do |f| %>

This would be the easiest option but I'm not 100% sure if that works
with a singular resource.

Would be curious to find out if it does?


On Apr 20, 10:14 am, "Paul A." <removed_email_address@domain.invalid>
Paul A. (Guest)
on 2009-04-20 20:51
Many thanks, Gavin M..

Thanks to your answer, I had making some modifications to gets this:

<% form_tag system_path do %>
<%= error_messages_for 'system' %>
...
<%= submit_tag 'Create' %>
<% end %>

After testing this line:
<% form_for :system, :url => {:action => :create} do |f| %>

it's okay too.
This topic is locked and can not be replied to.