Rails ошибка "NoMethodError" - мое первое приложение ruby - PullRequest
4 голосов
/ 10 мая 2009

Я абсолютно и совершенно новичок в рельсах, поэтому ответ, вероятно, очень прост. Здесь идет:

Моя страница генерирует эту ошибку

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 ]

5 голосов
/ 10 мая 2009

У вас есть

map.resources :tasks

в ваших маршрутах?

4 голосов
/ 10 мая 2009

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

Как и предполагалось, простая задача.

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

должно быть:

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

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

1 голос
/ 01 октября 2012

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

1 голос
/ 11 мая 2009

Относительно этого кода:

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

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

@all_tasks = Task.find(:all)

И это может быть далее сокращено до следующего

@all_tasks = Task.find.all

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

@tasks = Task.find.all

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

0 голосов
/ 10 мая 2009

Вы сгенерировали этот пример с помощью генератора скаффолдов? Потому что, если нет, возможно, вы забыли определить отображение URL ресурса в маршрутах. Rb:

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

Не забудьте перезапустить вебрик после добавления маршрута!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...