Rails错误“NoMethodError” - 我的第一个ruby应用程序

时间:2009-05-10 13:15:25

标签: ruby-on-rails ruby

我绝对是全新的rails,所以答案可能非常简单。这是:

我的页面正在生成此错误

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

undefined method `tasks_path' for #

以下是观点:

<% 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 %>

控制器:

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

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

和模型:

我看不出问题,但就像我说的那样,到目前为止我还是一无所知。 谢谢!

class Task < ActiveRecord::Base
    validates_presence_of :description

    belongs_to :priority
    has_and_belongs_to_many :staff
    has_and_belongs_to_many :catagory

end

5 个答案:

答案 0 :(得分:5)

你有吗

map.resources :tasks

在你的路线?

答案 1 :(得分:4)

感谢您的回答。

正如预测的那样,这是一个简单的问题。

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

应该是:

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

有趣的是,在发布问题后,您总能找到问题的答案! 再次感谢。

答案 2 :(得分:1)

关于此代码:

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

您不需要按ID指定顺序,因为它是默认行为。所以这应该足够了。

@all_tasks = Task.find(:all)

这可以进一步浓缩到以下

@all_tasks = Task.find.all

此外,rails约定是将实例变量命名为@tasks

@tasks = Task.find.all

玩Rails玩得很开心。

答案 3 :(得分:1)

请在View中查看您的文件名.. 它不应只有.html.erb

的扩展名.erb

答案 4 :(得分:0)

您是否使用脚手架生成器生成了此示例?因为如果不是,您可能忘记在routes.rb中定义ressource url映射:

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

添加路线后别忘了重新启动webrick!