On Mar 12, 1:48 pm, Mathijs Kwik <[email protected]> wrote:
> Is there a nice way to use dataset methods I already have on the user class?
>
> So something like
> g.memberships_dataset.filter(:user => User.recently_active)
>
> This way I won't have to repeat what recently_active means on multiple models.

Unfortunately not, because the association dataset is on Membership
and not on User.  You could use:

  g.memberships_dataset.filter(:user_id => User.recently_active.select
(:id))

If you find yourself doing this a lot, add a separate association:

  Group.one_to_many :recently_active_memberships, :clone=>:memberships
do |ds|
    ds.filter(:user_id=>User.recently_active.select(:id))
  end
  g.recently_active_memberships

If you really want to be able to use the User dataset methods, perhaps
something like:

  User.many_to_one :membership, :read_only=>true # Fake association
  class Group < Sequel::Model
    many_to_many :users, :select=>
[:users.*, :memberships__id___id2, :memberships__name___name2], 
:after_load=>:set_membership

    def set_membership(users)
      users.each do |user|
        v = user.values
        user.associations[:membership] = Membership.load(:id=>v.delete
(:id2), :name=>v.delete(:name2))
      end
    end
  end
  g.users.first.membership

That's easier than I expected, but it does force you to build the
membership object yourself.  The custom association approach may be
easier:

 
User.one_to_many :group_memberships, :class=>:Membership, :one_to_one=>true
  User.send(:alias_method, :membership, :group_membership)
  Group.many_to_many :users, :dataset=>proc{User.eager_graph
(:group_memberships).filter(:group_memberships__group_id=>id)}
  g.users.first.membership

All this code is untested, but hopefully it better lays out your
options.

Jeremy
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to