doctororange
doctororange

Reputation: 11810

Rails error "NoMethodError" - My first ruby app

I am absolutely and totally new to rails, so the answer is probably very simple. Here goes:

My page is generating this error

NoMethodError in Tasks#new
Showing app/views/tasks/new.erb where line #3 raised:

undefined method `tasks_path' for #

Here is the view:

<% form_for(@task) do |f| %>
    <%= f.error_messages %>

    <%= f.label :description %>:
    <%= f.text_field :description %><br />

    <%= f.label :priority %>:
    <%= collection_select(:news, :priority_id, Priority.find(:all), :id, :description) %><br />

    <%= f.submit "Add Task" %>

<% end %>

The controller:

class TasksController < ApplicationController
    def index
        @all_tasks = Task.find(:all, :order => :id)
    end

    def new
        @task = Task.new
    end ...(more)

and the model:

I can't see a problem, but like I said, I'm clueless so far. Thanks!

class Task < ActiveRecord::Base
    validates_presence_of :description

    belongs_to :priority
    has_and_belongs_to_many :staff
    has_and_belongs_to_many :catagory

end

Upvotes: 4

Views: 19335

Answers (5)

Abhijit Muke
Abhijit Muke

Reputation: 1214

Please check your file name in View.. It should have extension .html.erb not only .erb ...

Upvotes: 1

allesklar
allesklar

Reputation: 9590

Regarding this code:

@all_tasks = Task.find(:all, :order => :id)

You don't need to specify order by id because it's the default behavior. So this should suffice.

@all_tasks = Task.find(:all)

And this can be further condensed to the following

@all_tasks = Task.find.all

Furthermore, a rails convention is to name your instance variable @tasks

@tasks = Task.find.all

Have fun with Rails.

Upvotes: 1

doctororange
doctororange

Reputation: 11810

Thanks for the answers.

As predicted, as simple problem.

<% form_for(@task) do |f| %>

should be:

<% form_for(:task) do |f| %>

Funny how you always find the answer to a question right after you post it! Thanks again.

Upvotes: 4

reto
reto

Reputation: 16732

Have you generated this example using the scaffold generator? Because if not it might be that you forgot to define the ressource url mapping in the routes.rb:

--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,4 +1,6 @@
 ActionController::Routing::Routes.draw do |map|
+  map.resources :tasks
+

Don't forget to restart webrick after you've added the route!

Upvotes: 0

Jarrod
Jarrod

Reputation: 2378

Do you have

map.resources :tasks

in your routes?

Upvotes: 5

Related Questions