2011-02-17 46 views
1

我已經有了一個使用formtastic_cocoon(jquery)的3級嵌套表單,現在我希望能夠對錶單中第二組項目進行排序。從哪裏獲得嵌套對象的查詢?

我有jQuery的ui工作沒有問題,所以現在設置和更新欄中的排序順序。

我開始跟隨railscasts的軌位排序列表 http://asciicasts.com/episodes/147-sortable-lists

的形式結構是用戶 - >任務 - >位置。

在我的任務模型我設置索引

 
def index 
    @task = Task.find(params[:id],:order=>'position') 
end 

def edit 
    @task = Task.find(params[:id],:order=>'position') 
end 

,我期待我的控制檯看到

 
... FROM 'tasks' WHERE ('users'.'id' = 12) ORDER BY ('position') 

或類似的規定,但通過輸出沒有秩序。

有什麼地方需要我定義這個命令嗎? nested_object從哪裏得到它的關係?只有模型?

我的模型

 
class User < ActiveRecord::Base 

    has_many :tasks 
end 

class Task < ActiveRecord::Base 

    belongs_to :user 
end 
+0

這真的是你的代碼? `def編輯 @task = Task.find(params [:id],:order =>'position') end` – stef 2011-02-17 21:23:11

回答

1

我改變了模型

 
class User < ActiveRecord::Base 
    has_many :tasks, :order=>'position' 
end 
1

您使用了錯誤的模型,該ID是用戶的,所以你要做的:

User.find(params[:id]).tasks(:order => 'position ASC') 

否則,你只是得到了id = 12的任務,而不是user_id = 12

+0

將我的模型更改爲您的建議以某種方式破壞了用戶的has_attached_file。不知道爲什麼。 – pedalpete 2011-02-17 22:21:18

1

從你給出的答案,我懷疑真正的問題不在於任務控制器。您提供的默認順序非常好,但如果您有其他順序或過濾器需求,任務模型也不會完全執行。

我懷疑你實際上在用戶#編輯,或可能是_form.html.erb,它顯示每個任務的表單元素。可能有@ user.tasks.each {...}或類似的循環塊。

對於給定的用戶,然後執行:@ user.tasks.order(:position)。或者你可能需要打開任務:@ user.tasks.where(:open => true)等等。

+0

您是否在視圖中建議.order(:position)? – pedalpete 2011-02-17 22:14:48

1

你的代碼在這裏有點不對。

要找到用戶的任務,你會做這樣的路線:

User.find(params[:id]).tasks(:order=>'position')