Hi Steven
<% supp = Supplier.find(:first, :conditions => [ "suppcode = ?"
,
sdoc.supplier_id]) %>
After above line, supp will be nil if no suppliers satisfy the search
conditions so just do this
<%= supp.suppname unless supp.nil? %>
or you can add a to_s method to your supplier model like so
def to_s
suppname
end
then you can use <%= supp.to_s %> .... which doesn''t need a
conditional
because nil.to_s evaluates to ''''
Steven Beales
"Steven Heimann" <steven@heimann.com.au> wrote in
message
news:1142667622.31647.31.camel@localhost.localdomain...>I am new to Ruby and to Ruby on Rails and have spent the last few days
> trying to get my head around it. I think I am already hooked but am
> suffering badly from years of programming a non-OO RDBMS. I am trying
> to learn by attempting to produce a system for my work.
>
> I have a main table sdocs which has a field supplier_id which is an
> entry in another table (suppliers) to lookup supplier name etc. At the
> moment I am not using the id field of suppliers in an attempt to get
> around the following error. (The agile development book suggests that
> the nil error only results from a search on a key and not from a search
> on other fields but I am still having the problem.)
>
> "You have a nil object when you didn''t expect it!
> The error occured while evaluating nil.suppname"
>
> Sorry the code is such a mess at the moment because I have tried many
> different possible solutions.
>
> Part of the code follows:
>
> <% require ''pp'' %>
> <% for sdoc in @sdocs %>
> <tr>
> <td>( <%= pp Sdoc.columns.map { |col| col.name } %> ) <%=
> sdoc.supplier_id %><br />
> <% supp = Supplier.find(:first, :conditions => [ "suppcode =
?" ,
> sdoc.supplier_id]) %>
> <%= supp.suppname %>
> </td>
> <td><%= sdoc.supdesc %><b> /</b><br />
> <%= sdoc.rm_id %> </td>
> <td><%= sdoc.docdate %><br /><%= sdoc.expdate
%></td>
> <td><%= sdoc.doctype.docdesc %>
> <!-- <% for column in Sdoc.content_columns %>
> <td><%=h sdoc.send(column.name) %></td>
> <% end %>
> -->
> <td><%= link_to ''Show'', :action =>
''show'', :id => sdoc %><br />
> <%= link_to ''Edit'', :action =>
''edit'', :id => sdoc %><br />
> <%= link_to ''Destroy'', { :action =>
''destroy'', :id => sdoc },
> :confirm => ''Are you sure?'' %></td>
> </tr>
> <% end %>
>
> Where it tries to display supp.suppname I originally had
> sdoc.supplier.suppname. This was when I had a link
> using foreign keys. This works if the foreign key is always present and
> always correct but this is not the case with this database.
>
> I have googled for this problem but the suggested solutions do not seem to
> work. Things like the following have not helped.
>
> <% if sdoc.supplier.nil %>
> "test"
> <% else %>
> <%= sdoc.supplier.suppname %>
> <% end %>
>
> I am sure this is all because of my ignorance but I haven''t been
able to
> find a solution.
>
> As part of debugging I tried pp as above. This is a line straight out of
> the agile development book but produces nothing.
>
> Thank you for your help
> Steven