11175
(-- --)
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: <dl>
RAILS_ROOT: /Users/pulu/Sites/test
Do you think I get an error in new.html.erb?
Thanks
Dr_Gavin1
(Dr_Gavin)
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
11175
(-- --)
3
Gavin Morrice 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).
Dr_Gavin1
(Dr_Gavin)
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?
11175
(-- --)
5
Many thanks, Gavin Morrice.
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.