i''ve got a specific problem here and I''m not sure how to handle it. what i need to do is sort a has_many association in a very specific way. class Foo < AR::Base has_many :things end class Thing < AR::Base belongs_to :foo end class Order < Thing end class BInCheck < Thing end class Problem < Thing end class Special < Thing end class CycleCount < Thing end class Notification < AR::Base PRIORITIES = [:order, :bin_check, :problem, :special, :cycle_count] end now, what i need to do when when a foo goes into an ''available'' state, i need to create a notification for whatever needs foo next, based on the notification priorities. the problem is the sorting. what i want to do is sort the things for foo according to the Notification::PRIORITIES array. so that all i have to do is pass the first element in to generate the notification. note, that date also plays a part in that if there are 2+ of any type, they are sorted by date (:created_on attribute). one thing i thought of using was an association extension on Foo has_many :things do def for_notification .. end end bug again, i''m still blocked on the sorting. any ideas? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Chris Hall wrote:> i''ve got a specific problem here and I''m not sure how to handle it. > > what i need to do is sort a has_many association in a very specific way. > > class Foo < AR::Base > has_many :things > end > > class Thing < AR::Base > belongs_to :foo > end > > class Order < Thing > end > > class BInCheck < Thing > end > > class Problem < Thing > end > > class Special < Thing > end > > class CycleCount < Thing > end > > class Notification < AR::Base > > PRIORITIES = [:order, :bin_check, :problem, :special, :cycle_count] > end > > now, what i need to do when when a foo goes into an ''available'' state, > i need to create a notification for whatever needs foo next, based on > the notification priorities. the problem is the sorting. what i want > to do is sort the things for foo according to the > Notification::PRIORITIES array. so that all i have to do is pass the > first element in to generate the notification. note, that date also > plays a part in that if there are 2+ of any type, they are sorted by > date (:created_on attribute). > > one thing i thought of using was an association extension on Foo > > has_many :things do > def for_notification > .. > end > end > > bug again, i''m still blocked on the sorting. > > > any ideas?How do you decide which priority to pick? I''m assuming that :order is not the one that''s always called every time. -- Michael Wang --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
yes, that''s the priority. per the requirements. when a ''foo'' becomes available a notification should be generated based on the following priorities, highest to lowest order, bin check, problem, special, cycle count if there are multiple of a particular type, the oldest gets the notification. so basically what this means if i have say, 3 order, 1 bin check and 1 special associated with foo the oldest order gets the notification if i have 1 bin check and 2 cycle count, the bin check gets the notification. hence why i''d like to sort based on the priorities (and created_on within each) i listed and then just take the first one and generate a priority something like Notification.generate_for foo.things.sorted_for_notifications.first On 3/12/07, Michael Wang <rails-user-JtyympAsP2K7zZZRDBGcUA@public.gmane.org> wrote:> > Chris Hall wrote: > > i''ve got a specific problem here and I''m not sure how to handle it. > > > > what i need to do is sort a has_many association in a very specific way. > > > > class Foo < AR::Base > > has_many :things > > end > > > > class Thing < AR::Base > > belongs_to :foo > > end > > > > class Order < Thing > > end > > > > class BInCheck < Thing > > end > > > > class Problem < Thing > > end > > > > class Special < Thing > > end > > > > class CycleCount < Thing > > end > > > > class Notification < AR::Base > > > > PRIORITIES = [:order, :bin_check, :problem, :special, :cycle_count] > > end > > > > now, what i need to do when when a foo goes into an ''available'' state, > > i need to create a notification for whatever needs foo next, based on > > the notification priorities. the problem is the sorting. what i want > > to do is sort the things for foo according to the > > Notification::PRIORITIES array. so that all i have to do is pass the > > first element in to generate the notification. note, that date also > > plays a part in that if there are 2+ of any type, they are sorted by > > date (:created_on attribute). > > > > one thing i thought of using was an association extension on Foo > > > > has_many :things do > > def for_notification > > .. > > end > > end > > > > bug again, i''m still blocked on the sorting. > > > > > > any ideas? > > How do you decide which priority to pick? I''m assuming that :order is not the > one that''s always called every time. > > > -- > Michael Wang > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Chris Hall wrote:> yes, that''s the priority. per the requirements. > > when a ''foo'' becomes available a notification should be generated > based on the following priorities, highest to lowest > > order, bin check, problem, special, cycle count > > if there are multiple of a particular type, the oldest gets the notification. > > so basically what this means if i have say, 3 order, 1 bin check and 1 > special associated with foo > > the oldest order gets the notification > > if i have 1 bin check and 2 cycle count, the bin check gets the notification. > > hence why i''d like to sort based on the priorities (and created_on > within each) i listed and then just take the first one and generate a > priority > > something like > > Notification.generate_for foo.things.sorted_for_notifications.firstWhat''s the column that''s storing the priority in Thing? If you are storing the priority as a string in Thing the simple thing to is to prefix something in the front of the priorities that allows you to sort them easily like: a_order, b_bin_check, etc. or 1_order, 2_bin_check, etc. then you can just do :order => "priority, created_at". If you are storing it as an integer then you just need to make sure that they are ordered properly. E.g. order = 1, bin_check = 2, etc. -- Michael Wang --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---