简体   繁体   中英

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

Do you have

map.resources :tasks

in your routes?

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.

请在View中检查你的文件名..它应该有扩展名.html.erb不仅.erb ...

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.

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!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM