可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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!