Rails error “NoMethodError” - My first ruby app

匿名 (未验证) 提交于 2019-12-03 07:36:14

问题:

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 

回答1:

Do you have

map.resources :tasks 

in your routes?



回答2:

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.



回答3:

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.



回答4:

Please check your file name in View.. It should have extension .html.erb not only .erb ...



回答5:

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!



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!