
Sorting on join associations
Reported by David Smalley | September 30th, 2008 @ 12:38 PM
In a project I want to be able to do this....
class Ticket
has n, :ticket_statuses, :order => [:created_at.desc]
has n, :statuses, :through => :ticket_statuses
end
If I call 'ticket.ticket_statuses' I get the following query:
SELECT "ticket_id", "status_id", "created_at" FROM "ticket_statuses" WHERE ("ticket_id" IN ('8D5T-DWUNUG')) ORDER BY "created_at" DESC
But if I call 'ticket.statuses' I get
SELECT "statuses"."id", "statuses"."name", "statuses"."object_class" FROM "statuses" INNER JOIN "ticket_statuses" ON ("statuses"."id" = "ticket_statuses"."status_id") WHERE ("ticket_statuses"."ticket_id" = '8D5T-DWUNUG') GROUP BY "statuses"."id", "statuses"."name", "statuses"."object_class" ORDER BY "statuses"."id"
I then tried to specify the has n, :statuses as:
has n, :statuses, :through => :ticket_statuses, :order => ["ticket_statuses.created_at DESC"] and has n, :statuses, :through => :ticket_statuses, :order => ["ticket_statuses.created_at.desc"]
But both of these fail with
ArgumentError: Unknown property 'ticket_statuses.created_at.desc'
Is it a bug that I cannot apply an order to a join table in this way, or a feature?
Comments and changes to this ticket
-
David Smalley September 30th, 2008 @ 12:39 PM
Formatting seems to be broken, hopefully it still all makes sense.
-
Dan Kubb (dkubb) January 8th, 2009 @ 05:09 AM
- State changed from new to accepted
- Assigned user changed from Sam Smoot to Dan Kubb (dkubb)
-
Justin Smestad February 23rd, 2009 @ 04:25 PM
This is still broken on dm-next. I am getting the same error using his script.
/tmp/test-bug > ruby bug.rb [] Included HasAddress into Person [] Included Model into Person [] Included HasEmail into Person [] Included Model into Person [!] Notice how the 'address' property is not present
<PropertySet:{#<Property:Person:type>,#<Property:Person:email>,#<Property:Person:id>}>
-
-
Kabari March 8th, 2009 @ 09:37 PM
note This error also happens when adding an attribute to the association ie ":property.not => nil"
-
Dan Kubb (dkubb) June 16th, 2009 @ 03:21 AM
- Milestone set to 0.10.0
-
Dan Kubb (dkubb) July 23rd, 2009 @ 11:46 AM
- Milestone changed from 0.10.0 to 0.10.1
-
Dan Kubb (dkubb) October 4th, 2009 @ 09:33 PM
- Milestone changed from 0.10.1 to 0.10.2
[project:id#20609 not-tagged:"0.10.0" not-tagged:"0.10.1" milestone:id#51895 bulk edit command]
-
Dan Kubb (dkubb) October 6th, 2009 @ 11:41 AM
- Milestone cleared.
- State changed from accepted to suggestion
- Assigned user cleared.
Currently we do not know if this will be possible outside of RDBMS, so I am marking this as a "suggestion" to revisit later.
With an RDBMS this is trivially simple, you just reference the intermediaries' columns in the ORDER BY, and you get the results back sorted by the intermediary.
With a non-RDBMS, which DataMapper also targets, we don't yet know how m:m relationships will work. It is likely that each intermediary will be fetched, and then joined in-memory with the next relationship in the chain. This will be difficult enough to get right without also throwing intermediary sorting into the mix.
I think this probably will be accepted at some point, it's just that we've got a number of things far more important to resolve first, from self referential m:m, to m:m with non-RDBMS adapters.
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »