[noob question] View error, Resource route


#1

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:


RAILS_ROOT: /Users/pulu/Sites/test

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

Thanks


#2

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


#3

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).


#4

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/Helpers/ActiveRecordHelper.html#M001662

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


#5

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.