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
-~----------~----~----~----~------~----~------~--~---