2009-05-10 7 views
4

Je suis absolument et totalement nouveau aux rails, donc la réponse est probablement très simple. Ici va:Rails erreur "NoMethodError" - Ma première application ruby ​​

Ma page est la génération de cette erreur

NoMethodError in Tasks#new 
Showing app/views/tasks/new.erb where line #3 raised: 

undefined method `tasks_path' for # 

Voici la vue:

<% 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 %> 

Le contrôleur:

class TasksController < ApplicationController 
    def index 
     @all_tasks = Task.find(:all, :order => :id) 
    end 

    def new 
     @task = Task.new 
    end ...(more) 

et le modèle:

Je ne peux pas voir un problème, bu Comme je l'ai dit, je suis complètement désemparé. Merci!

class Task < ActiveRecord::Base 
    validates_presence_of :description 

    belongs_to :priority 
    has_and_belongs_to_many :staff 
    has_and_belongs_to_many :catagory 

end 

Répondre

5

Avez-vous

map.resources :tasks 

dans vos itinéraires?

+0

Oh, vous avez raison sur. Après avoir ajouté cela, j'ai pu utiliser form_for avec @task – doctororange

+0

Si vous avez @task = Task.new dans votre action, le formulaire_for (@task) fait référence à l'objet de tâche vide.: task rendrait votre formulaire soumis à tasks/new au lieu d'une tâche RESTful/avec method = 'post'. – Jarrod

0

Avez-vous généré cet exemple en utilisant le générateur d'échafaudage? Parce que sinon il se pourrait que vous avez oublié de définir la cartographie url dans la routes.rb ressource:

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

Ne pas oublier de redémarrer webrick après avoir ajouté la route!

+0

Existe aussi 'http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M000295&name=resources' Hmm .. et @task devrait fonctionner. – reto

4

Merci pour les réponses.

Comme prédit, comme un simple problème.

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

devrait être:

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

drôle comment vous trouvez toujours la réponse à une question juste après que vous publiez! Merci encore.

1

En ce qui concerne ce code:

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

Vous n'avez pas besoin de spécifier l'ordre par id parce qu'il est le comportement par défaut. Donc, cela devrait suffire.

@all_tasks = Task.find(:all) 

Et cela peut encore être condensé à ce qui suit

@all_tasks = Task.find.all 

En outre, une convention de rails est de nommer votre instance @tasks variables

@tasks = Task.find.all 

Amusez-vous avec Rails.

+0

Merci. Task.find.all donne l'erreur "Impossible de trouver la tâche sans ID" ~ $ ruby ​​--version ruby ​​1.8.7 (2008-08-11 patchlevel 72) [i486-linux] ~ $ rails --version Rails 2.3.2 – doctororange

1

S'il vous plaît vérifier votre nom de fichier dans la vue .. Il devrait avoir une extension .html.erb non seulement .erb ...

Questions connexes