judge
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
judge
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.” [email protected]
judge
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).
judge
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.” [email protected]
judge
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.