It seems to me that if you used <sortable-collection> on a set of
alteration_assignments rather than on a set of alterations, it should
work. Are you using Hobo 2.0 or 1.3?
Bryan
On Wed, Dec 12, 2012 at 2:45 PM, Ryan <
rgr...@gmail.com> wrote:
> I have a many-to-many where the order matters on one side, and the draggable
> reordering that the Agility tutorial uses would be great to use - however it
> doesn't seem to be as easy as the one-to-many example in the tutorial.
>
> I have my objects and relationships set up as:
>
> class Destination < ActiveRecord::Base
>
> hobo_model # Don't put anything above this
>
> fields do
> name :string
> timestamps
> end
> attr_accessible :name, :alterations
>
> has_many :alteration_assignments, :dependent => :destroy
> has_many :alterations, :through => :alteration_assignments, :accessible =>
> true, :dependent => :destroy, :order => "position"
>
> children :alterations
>
>
> class Alteration < ActiveRecord::Base
>
> hobo_model # Don't put anything above this
>
> fields do
> name :string
> script :string
> timestamps
> end
> attr_accessible :name, :script
>
> has_many :alteration_assignments, :dependent => :destroy
> has_many :destinations, :through => :alteration_assignments
>
>
> class AlterationAssignment < ActiveRecord::Base
>
> hobo_model # Don't put anything above this
>
> fields do
> timestamps
> end
> attr_accessible
> belongs_to :destination
> belongs_to :alteration
> acts_as_list :scope => :destination
>
>
> It works great - alterations are added, and the position field is set
> properly when adding an alteration, except the draggable list doesn't render
> - the normal alteration cards show up under show destination, and the normal
> alteration select/add/remove shows up under edit destination.
>
> I'm assuming the problem has to do with the acts_as_list only being on the
> assignment object and not the actual alteration object:
>
> irb(main):004:0> destination.alterations.first.move_to_bottom
> Alteration Load (19.1ms) SELECT "alterations".* FROM "alterations" INNER
> JOIN "alteration_assignments" ON "alterations"."id" =
> "alteration_assignments"."alteration_id" WHERE
> "alteration_assignments"."destination_id" = 4 ORDER BY position LIMIT 1
> NoMethodError: undefined method `move_to_bottom' for #<Alteration:0xaa229e8>
>
>
> irb(main):006:0> destination.alteration_assignments.first.move_to_bottom
> AlterationAssignment Load (1.0ms) SELECT "alteration_assignments".* FROM
> "alteration_assignments" WHERE "alteration_assignments"."destination_id" = 4
> LIMIT 1
> (0.6ms) BEGIN
> SQL (0.9ms) UPDATE "alteration_assignments" SET position = (position - 1)
> WHERE ("alteration_assignments"."destination_id" = 4 AND position > 1)
> AlterationAssignment Load (1.1ms) SELECT "alteration_assignments".* FROM
> "alteration_assignments" WHERE ("alteration_assignments"."destination_id" =
> 4 AND id != 4) ORDER BY alteration_assignments.position DESC LIMIT 1
> (0.8ms) UPDATE "alteration_assignments" SET "position" = 2, "updated_at"
> = '2012-12-12 19:36:58.007222' WHERE "alteration_assignments"."id" = 4
> (0.9ms) SELECT COUNT(*) FROM "alteration_assignments" WHERE
> ("alteration_assignments"."destination_id" = 4 AND position = 2)
> (55.0ms) COMMIT
> => true
>
>
> Is there a way to get Hobo to deal with this automagically like with
> one-to-many, or do I need to write something myself?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Hobo Users" group.
> To view this discussion on the web visit
>
https://groups.google.com/d/msg/hobousers/-/rBbimvP3HzcJ.
> To post to this group, send email to
hobo...@googlegroups.com.
> To unsubscribe from this group, send email to
>
hobousers+...@googlegroups.com.
> For more options, visit this group at
>
http://groups.google.com/group/hobousers?hl=en.