Problem with validation

hi

i define in my model for example this validation: validates_presence_of
:commentaires
but when in my form my field is empty i have this error

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

Can you help me?

It would help I think if you could past the last five to 10 lines of the
stack trace.

Mazraelle M. wrote:

hi

i define in my model for example this validation: validates_presence_of
:commentaires
but when in my form my field is empty i have this error

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

Can you help me?

i had the same issue. mine was because i needed to set my arrays again
from other models before the redirection back to the new page again.

here’s what i had to do:
def new
@item = Item.new
@item_types = ItemType.find(:all)
@attributes = Attribute.find(:all)
@wears = Wear.find(:all)

respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @item }
end

end

then in my create function i had to set the variables again:

def create
@item = Item.new(params[:item])

respond_to do |format|
  if @item.save
    flash[:notice] = 'Item was successfully created.'
    format.html { redirect_to(@item) }
    format.xml  { render :xml => @item, :status => :created, 

:location => @item }
else
@item_types = ItemType.find(:all)
@attributes = Attribute.find(:all)
@wears = Wear.find(:all)

    format.html { render :action => "new" }
    format.xml  { render :xml => @item.errors, :status => 

:unprocessable_entity }
end
end
end

hope that helps

def new

@fraisreel = Fraisreel.new
@salarie_id =session[:user_id]
liste_deroulante


@mois = session[:mois]
@annee = session[:annee]
@date = @annee + "-" + @mois

end

def create
@jour_form = params[:jour]
params[:fraisreel][:date_jour]+="-" + @jour_form.to_s
@fraisreel_form = Fraisreel.new(params[:fraisreel])

if @fraisreel_form.save
  flash[:notice] = 'La nouvelle ligne de Frais Reel a été ajouter 

avec succes.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end

def liste_deroulante
@resultat = Fraisreel.find_liste_affaire_salarie(session[:user_id])
for resultat in @resultat
@resultat2 = Fraisreel.find_liste_lot(resultat.projetdept)
@lots1 = @resultat2.map{|of| [resultat.code_projet + " - " +
of.code_lot, of.lotid]}
end
@resultat = Fraisreel.find_liste_affaire_tous_le_monde
@lots2 = @resultat.map{|of| [of.code_projet + " - " + of.code_lot,
of.lotid]}
@lots = @lots2 + @lots1
end

in my view

      <%= text_field :jour, params[:jour]%>
    </td>
    <td>
        <%= select('fraisreel','lot_id',@lots,{:selected 

=>@selected_lot},{}) %>



<%= text_field ‘fraisreel’, ‘hotel’, “size” =>6
,“class”=>“sChamps” %>€


<%= text_field ‘fraisreel’, ‘restaurant’, “size”
=>6,“class”=>“sChamps” %>€

<%= hidden_field(‘fraisreel’,‘date_jour’,:value =>@date)%>

Mazraelle M. wrote:

def new

@fraisreel = Fraisreel.new
@salarie_id =session[:user_id]
liste_deroulante


@mois = session[:mois]
@annee = session[:annee]
@date = @annee + "-" + @mois

end

def create
@jour_form = params[:jour]
params[:fraisreel][:date_jour]+="-" + @jour_form.to_s
@fraisreel_form = Fraisreel.new(params[:fraisreel])

if @fraisreel_form.save
  flash[:notice] = 'La nouvelle ligne de Frais Reel a été ajouter 

avec succes.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end

def liste_deroulante
@resultat = Fraisreel.find_liste_affaire_salarie(session[:user_id])
for resultat in @resultat
@resultat2 = Fraisreel.find_liste_lot(resultat.projetdept)
@lots1 = @resultat2.map{|of| [resultat.code_projet + " - " +
of.code_lot, of.lotid]}
end
@resultat = Fraisreel.find_liste_affaire_tous_le_monde
@lots2 = @resultat.map{|of| [of.code_projet + " - " + of.code_lot,
of.lotid]}
@lots = @lots2 + @lots1
end

in my view

      <%= text_field :jour, params[:jour]%>
    </td>
    <td>
        <%= select('fraisreel','lot_id',@lots,{:selected 

=>@selected_lot},{}) %>



<%= text_field ‘fraisreel’, ‘hotel’, “size” =>6
,“class”=>“sChamps” %>€


<%= text_field ‘fraisreel’, ‘restaurant’, “size”
=>6,“class”=>“sChamps” %>€

<%= hidden_field(‘fraisreel’,‘date_jour’,:value =>@date)%>

here there is the next line in the error page
Extracted source (around line #46):

43: <%= text_field :jour, params[:jour]%>
44:
45:


46: <%= select(‘fraisreel’,‘lot_id’,@lots,{:selected
=>@selected_lot},{}) %>
47:
48:
49: <%= text_field ‘fraisreel’, ‘hotel’, “size” =>6
,“class”=>“sChamps” %>€

Mazraelle M. wrote:

Extracted source (around line #46):

46: <%= select(‘fraisreel’,‘lot_id’,@lots,{:selected

This line (erb line of code) is diving off into ruby code. The
log/development.log file will have a full stack trace back. You will
see this line a few lines down from the top. The next line up will
probably be a call to select. etc. You need to follow the stack and
see which variable it is trying to use when it gets the error.

My guess is that @lots is empty. You can do a couple of things.

One thing would be to add a debug line in your controller method just
before calling the render (or just before it returns). Print out @lots,
etc.

Another possibility (I’ve never tried this) <% debugger %> just before
this line. Then invoke your server with ./script/server --debugger

When you hit the line before, it will plop into the debugger. You can
then poke around and see what is happening.