How to work with data from DB in controller

Hi there,
I have the collection with items "name", "surname", "sequence". When
I'm saving next user to my collection, I need to get the highest value
of "sequence" in my collection, this value increment and save to new
user... but I don't know, how to get the highest value stored in
collection...

But obviously I'm getting error message about undefined local variable
sequence.

I am trying this problem to solve following:

Are you sure you're not getting "undefined local variable save_seq"?
Did you cut/paste the code here, or did you re-type it (so is it
*exactly* what's in your controller, or could there be small
differences?)

It could be worth you setting save_seq:
  high = Users.find(:order => 'sequence_at DESC', :limit => 1)
  save_seq = high.sequence
  unless high.sequence.nil? || high.sequence == 0
  ...etc

No no, the exactly error is "undefined method `sequence' for
nil:NilClass".

It looks I am getting the database object in var "high", but I can't to
get individual items from this object (like "sequence" or "name"). When
I am trying to print the sequence (puts high.sequence), I am getting
error "undefined method `sequence' for nil:NilClass".

If I look to data stored in database, I see:

{ "_id" : ObjectId("4d94f53fd3d8496acd00000d"), "name" : "John",
"surname" : "Smith", "level" : 0, "sequence" : 0 }

So I am a bit confused, where could be fail

That is not what you said the error was initially.
High must be nil. Try surrounding the code by if !high.nil? (or just
if high). That should make the error go away. Then you can work out
why high is nil.

Colin

No no, the exactly error is “undefined method `sequence’ for
nil:NilClass”.

It looks I am getting the database object in var “high”, but I can’t to
get individual items from this object (like “sequence” or “name”). When
I am trying to print the sequence (puts high.sequence), I am getting
error “undefined method `sequence’ for nil:NilClass”.

This is because more than one record has been returned with your find or it returned you single record search as an array. You have to loop over the items in the collection “high” then you will be able to access each items method.

B.

Sorry, missed the nil part. What Colin said below is correct. Try that first.

B.

No no,

I heard you the first time :-/

the exactly error is "undefined method `sequence' for
nil:NilClass".

Now you see, this is where full error messages help. The object
you're calling "sequence" on is nil, so something is failing higher up
in the code when populating "high".

It looks I am getting the database object in var "high",

How are you sure? Have you done a "puts high.inspect" or inserted a
debugger breakpoint at that line?

get individual items from this object (like "sequence" or "name"). When
I am trying to print the sequence (puts high.sequence), I am getting
error "undefined method `sequence' for nil:NilClass".

right... and at the risk of labouring the point, that "puts
high.sequence" line isn't in your original code snippet, and you
didn't indicate which line was failing, so how are we supposed to be
able to see when you're "obviously ... getting error message"? :-/

If I look to data stored in database, I see:

{ "_id" : ObjectId("4d94f53fd3d8496acd00000d"), "name" : "John",
"surname" : "Smith", "level" : 0, "sequence" : 0 }

How are you doing this? Show us the code that generates that result

So I am a bit confused

Me too... not least by the fact that your "Users.find" is plural (is
the model *really* called "Users", or is it "User"?), and that the
condition looks for "sequence_at" while everywhere else you ask just
for "sequence". And finally, that if all you're after is the highest
value for "sequence" (or sequence_at) from your table, why not use the
ActiveRecord calculation method "maximum"?
  high = User.maximum(:sequence)

I sincerely hope that something here helps you, but first you have to
help yourself by asking well thought-out questions, and answering any
requests for clarification without tetchiness... :-/