Bonjour,
J’ai un soucis dans une appli rails.
Je defini une variable d’instance dans la methode new() et edit() du
controller qui sert a construire un select() dans la vue:
class WorksController < ApplicationController
[…]
def new
@task = Task.new
@parents_ids = [["(No parent)",0]] + Task.find(:all, :order =>
“name”).map {|p| [p.name, p.id]}
end
def edit
@task = Task.find(params[:id])
@parents_ids = [["(No parent)",0]] + Task.find(:all, :order =>
“name”).map {|p| [p.name, p.id]} - [[@task.name, @task.id]]
end
[…]
end
Le model est simplement:
class Task < ActiveRecord::Base
acts_as_tree :order => “id”
has_many :runtimes
belongs_to :people
end
Et voici le bout de code qui l’utilise pour construire le select dans la
vue (un render partial utilisé pour new et edit):
logger.info “New task: ==#{@task}== >>#{@parents_ids}<<”
select(:task, :parent_id, @parents_ids)
-%>
Jusqu’ici tout fonctionne parfaitement. En faisant un new ca marche j’ai
bien ma liste de choix dans la vue qui s’affiche et je peux creer des
enregistrements.
Mais alors je decide de rajouter une validation dans le model:
validates_presence_of :name
Et a partir de ce moment la, si je tente de creer une nouvelle task sans
nom, j’ai l’erreur suivante a la soumission:
Showing app/views/works/_form.rhtml where line #9 raised:
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.inject
Extracted source (around line #9):
6:
7:
8: logger.info “New task: ==#{@task}== >>#{@parents_ids}<<”
9: select(:task, :parent_id, @parents_ids)
10: -%>
11:
12:
Et effectivement dans le log @parents_ids est vide !!?
Par contre @task a une valeur.
Pourquoi cette variable n’a t-elle pas de valeur alors qu’elle est
definie dans le controller pour new() tout comme @task d’ailleurs ?
Regards,
Thierry