現在有一個model:(任務)
[code]class Tasklist < ActiveRecord::Base
end[/code]
要實作act_as_list,如果不限定排序範圍,最簡單
[code]class Tasklist < ActiveRecord::Base
acts_as_list
end[/code]這樣,所有記錄的position根據記錄數自己累加
如果要限定:position僅對同一個父節點(對任務分解後,父節點下有多個任務)下的tasklist進行排序,也非常簡單
[code]class Tasklist < ActiveRecord::Base
acts_as_list :scope => :parent_id
end[/code]
現在問題來了,如果任務屬于多個project,在上面的基礎上要再限定project_id
[code]class Tasklist < ActiveRecord::Base
acts_as_list :scope => "project_id = #{project_id} AND parent_id = #{parent_id}"
end[/code]這樣,當parent_id為空時,生成的SQL語句會出錯:
因為: "parent_id = AND"
為了處理 "parent_id IS NULL"的情況:
[code]class Tasklist < ActiveRecord::Base
acts_as_list :scope => "project_id = #{project_id} AND parent_id #{parent_id ? '=' + parent_id.to_s : 'IS NULL'}"
end[/code]
這個裡面應該沒有問題了,但Tasklist.new時會提示project_id與parent_id都不存在,請
我參考了一面的一個連結,發現根據裡面貼出來的代碼并不能解決這個問題
http://dev.rubyonrails.org/ticket/3018