2009-05-10 11 views
4

私は本当に完全にレールに慣れているので、答えはおそらく非常に簡単です。ここに行く:Railsエラー "NoMethodError" - 私の最初のRubyアプリケーション

マイページはこちら

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) 

とモデル:

私は問題を見ることができない、bu私が言ったように、私は今のところ無知だ。 ありがとう!

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

はあなたのルートで

map.resources :tasks 

を持っていますか?

+0

ああ、あなたは右にしています。それを追加した後、私は@taskでform_forを使用することができました – doctororange

+0

@task = Task.newがアクションにある場合、form_for(@task)は空のタスクオブジェクトを参照します。:タスクはフォームをRESTfulタスクの代わりにtasks/newに、method = 'post'を使って提出します。 – Jarrod

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に再起動することを忘れないでください!

+0

またチェックアウト 'http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M000295&name=resources' うーん..と@タスクはうまくいくはずです。 – reto

4

お返事ありがとうございます。

予想通り、単純な問題です。

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

する必要があります:あなたは常にあなたがそれを投稿した直後質問に対する答えを見つける方法

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

おかしいです! もう一度ありがとうございます。このコードについて

1

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

あなたはそれがデフォルトの動作だからidで順序を指定する必要はありません。これで十分です。

@all_tasks = Task.find(:all) 

そして、これはさらに、次の

さらに
@all_tasks = Task.find.all 

に凝縮することができ、レールの大会は、変数@tasks

@tasks = Task.find.all 

はRailsのを楽しんでいるあなたのインスタンスに名前を付けることです。

+0

ありがとうございます。 Task.find.allは "IDなしでタスクを見つけることができませんでした"を返します 〜$ ruby​​ --version ruby​​ 1.8.7(2008-08-11 patchlevel 72)[i486-linux] 〜$ rails --version Rails 2.3.2 – doctororange

1

ビューでファイル名を確認してください。.. それは延長.html.erbだけでなく.erbを持っている必要があります...

関連する問題