Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

SimpleObject.last not implemented #8

Open
d5e opened this Issue · 3 comments

2 participants

@d5e

I have found that in simply_stored/lib/simply_stored/couch/finders.rb there is a :first method implemented, so I can fetch the first record of that type. Working.

But I am missing a :last method allowing me, to get the last record ...

should be something like

def last(*args)
  find(:last, *args)
end

as the first query is made via

CouchPotato.database.view(all_documents(:limit => 1)).first

it seems that a performant approach has to look different for last as for first as we cannot use that :limit => 1 here

@roidrage

Yrah, it would have to look different, but that's not hard to achieve with CouchDB, as you can tell it to walk the view's b-tree backwards. I'll look into it.

@d5e

hey matt, I just found out one way of achieving this MyModel.last thing ... I am not sure whether there is a more generic method, but If you specify a view for the model like

view :latest_view, :key => :created_at, :descending => true, :limit => 1

def self.last
    CouchPotato.database.view(Document.latest_view).first
end

this would return the last Document

@d5e

I just found out one more option ... without the need to define a view inside the model

#simply_stored/couch/finders.rb
        when :last
          if with_deleted || !soft_deleting_enabled?
            CouchPotato.database.view(all_documents(:limit => 1, :descending => true)).first
          else
            CouchPotato.database.view(all_documents_without_deleted(
              :key => nil, :limit => 1, :descending => true)).first
          end
        else

best regards!

Henry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.