Nick Woolley
2006-May-15 10:10 UTC
[Rails] acts_as_list, move_higher, odd indexing behaviour?
Hi, [reposting to list, posting via google groups apparently didn''t work] I''m trying to use acts_as_list for the first time. Can anyone confirm the odd behaviour reported here? http://blog.nominet.org.uk/tech/Web/2006/03/06/Using_acts_as_list_in_... i.e. element access and move_higher require an odd indexing scheme to work. I''m personally finding that I can''t seem to change the list element positioning in a rails unit test using move_higher/move_lower, although move_to_top works. (See code following below) Cheers, N ---- # model defs class AccountTransaction < ActiveRecord::Base has_many :credits, :foreign_key => ''transaction_id'', :order => ''position ASC'' end class Credit < ActiveRecord::Base belongs_to :account_transaction, :foreign_key => ''transaction_id'' belongs_to :account acts_as_list :scope => :transaction_id belongs_to :credit_type end #unit test class AccountTransactionTest < Test::Unit::TestCase fixtures :account_transactions, :credits def display_credits(transaction) transaction.credits.each_index do |x| credit = transaction.credits[x] puts " index #{x} id #{credit.id} position #{credit.position}" end end def test_credits assert_equal @account_transaction.credits[0].id, @first_credit.id assert_equal @account_transaction.credits[1].id, @second_credit.id display_credits @account_transaction @account_transaction.credits[1].move_higher # doesn''t work @account_transaction.reload display_credits @account_transaction @account_transaction.credits[1].move_to_top # does work @account_transaction.reload display_credits @account_transaction assert_equal @account_transaction.credits[1].id, @first_credit.id assert_equal @account_transaction.credits[0].id, @second_credit.id end end # outputs: # Loaded suite test/unit/account_transaction_test # Started # index 0 id 1 position 1 # index 1 id 2 position 8 # index 0 id 1 position 1 # index 1 id 2 position 8 # index 0 id 2 position 1 # index 1 id 1 position 2 # .. # Finished in 0.188056 seconds. # credits.yml first_credit: id: 1 transaction_id: 1 position: 1 account_id: 1 amount: 11 credit_type_id: 1 second_credit: id: 2 transaction_id: 1 position: 8 account_id: 1 amount: 18 credit_type_id: 1 # account_transactions.yml first_account_transaction: id: 1 date: 23/01/2005 description: blah comments: blah another_account_transaction: id: 2 date: 23/07/2005 description: blah comments: blah