2009-05-10 2 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) 

и модель:

Я не вижу проблемы, бу Как я уже сказал, я до сих пор не знаю. Спасибо!

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

О, вы правы на. Добавив это, я смог использовать form_for с @task – doctororange

+0

Если у вас есть @task = Task.new в вашем действии, form_for (@task) ссылается на пустой объект задачи.: задача превратит вашу форму в задачи/новую вместо задачи RESTful/with method = 'post'. – Jarrod

0

Сгенерировали ли вы этот пример с помощью генератора эшафотов? Потому что, если не может быть, что вы забыли определить отображение URL-адрес Ressource в routes.rb:

--- 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' Хмм .. и @task должны работать. – reto

4

Спасибо за ответы.

Как и было предсказано, как простая проблема.

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

должно быть:

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

Забавно, как вы всегда найдете ответ на вопрос сразу после разместить его! Еще раз спасибо.

1

Что касается этого кода:

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

Вам не нужно указывать порядок по идентификатору, потому что это поведение по умолчанию. Поэтому этого должно быть достаточно.

@all_tasks = Task.find(:all) 

И это может быть дополнительно конденсируется к следующему

@all_tasks = Task.find.all 

Кроме того, соглашение рельсы является имя вашего экземпляра переменной @tasks

@tasks = Task.find.all 

Веселитесь с Rails.

+0

Спасибо. Task.find.all дает ошибку «Не удалось найти задачу без идентификатора» ~ $ ruby ​​--version ruby ​​1.8.7 (2008-08-11 patchlevel 72) [i486-linux] ~ $ rails --version Rails 2.3.2 – doctororange

1

Пожалуйста, проверьте имя файла в View .. Он должен иметь расширение .html.erb не только .erb ...

Смежные вопросы