2011-01-08 61 views
-1

我有2個模型,用戶和項目。現在,它們通過has_and_belongs_to_many連接(多對多)連接。用戶有一個項目列表,這個列表可以通過ajax排序。但我想存儲這個訂單。我該如何發送此訂單並以適當方式存儲?如何在Ajax列表中存儲項目的順序?

回答

1

要sorteable列表我jQueryUI的工作 - >http://jqueryui.com/demos/sortable/

以獲取列表:

var projects = Array(); 
var j=0; 

$("#sortable li").each(function(i, item){ 
    projects[j] = $("#"+item.id).html();    
    j++; 
}); 

var data = {"list": projects}; 

然後我用Ajax

1

發送數據,你必須考慮項目的順序在用戶列表上作爲用戶和項目之間的關係的屬性。每對用戶/項目都有一個屬性「訂單」,對吧?

因此,信息應該放在中介表(projects_users)中。

但是,因爲你不能屬性添加到have_and_belongs_to_many鏈接表,你應該改變它的東西,如:

class User 
    has_many :allocations 
    has_many :projects, :through => :allocations 
end 

class Project 
    has_many :allocations 
    has_many :users, :through => :allocations 
end 

,並在分配表中的遷移應該是這樣的:

create_table :allocations do |t| 
    t.integer :project_id 
    t.integer :user_id 
    t.integer :order 
end 

這樣,對於給定用戶分配給每個項目,您可以指定訂單。

我希望這會有所幫助。

+1

該表應該有一個ID權?我認爲你創建HABTM表時只使用:id => false。 – RobinBrouwer 2011-01-08 16:21:03

1

你可以做的是循環遍歷所有使用Javascript的項目,並使用AJAX將一個ID數組發送到Rails動作(如Manu Mora示例所示)。這些參數會是這個樣子:

project_ids: 1,3,5,2,4 
id: 1 

然後在你的控制器動作,你可以做到以下幾點:

@user = User.find(params[:id]) 
@user.update_attributes(:project_ids => params[:project_ids].split(",")) 

我不知道如何發送參數的方式,它是一個數組自動,所以我使用split。我不知道使用HABTM時訂單是否合適。如果不是,則應使用has_many :through,並在'訂單'或'位置'列中使用。我展示給你的方式不會奏效,因爲你還需要設置訂單欄。

希望它有效。 :)

相關問題