11175
(-- --)
May 24, 2008, 10:03pm
1
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?
11175
(-- --)
May 25, 2008, 12:42am
2
It would help I think if you could past the last five to 10 lines of the
stack trace.
11175
(-- --)
May 25, 2008, 1:32am
3
Mazraelle Mazraelle 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
11175
(-- --)
May 25, 2008, 8:40am
4
Mazraelle Mazraelle 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
<td>
<%= text_field :jour, params[:jour]%>
</td>
<td>
<%= select('fraisreel','lot_id',@lots ,{:selected
=>@selected_lot},{}) %>
</td>
<td class="tt">
<%= text_field 'fraisreel', 'hotel', "size" =>6
,"class"=>"sChamps" %>€
</td>
<td class="tt">
<%= text_field 'fraisreel', 'restaurant', "size"
=>6,"class"=>"sChamps" %>€
</td>
<%= 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: </td>
45: <td>
46: <%= select('fraisreel','lot_id',@lots ,{:selected
=>@selected_lot},{}) %>
47: </td>
48: <td class="tt">
49: <%= text_field 'fraisreel', 'hotel', "size" =>6
,"class"=>"sChamps" %>€
11175
(-- --)
May 25, 2008, 1:07pm
5
Mazraelle Mazraelle 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.