天天看點

如何解決acts_as_list 多字段限定的問題?

現在有一個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