我有2个模型,用户和项目。现在,它们通过has_and_belongs_to_many连接(多对多)连接。用户有一个项目列表,此列表可由ajax排序。但我想存储这个订单。如何以正确的方式发送此订单并存储?
答案 0 :(得分:1)
可排序列表我使用jQuery UI - > 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 :(得分:1)
您必须将用户列表上项目的顺序视为用户与项目之间关系的属性。每对用户/项目都有一个属性'order',对吗?
因此,信息应该放在中间表(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
这样,对于分配给定用户的每个项目,您可以指定订单。
我希望这会有所帮助。
答案 2 :(得分:1)
你可以做的是使用Javascript循环遍历所有项目,并使用AJAX将一个ID数组发送到Rails动作(如Manu Mora给出的示例)。参数看起来像这样:
project_ids: 1,3,5,2,4
id: 1
然后在您的Controller操作中,您可以执行以下操作:
@user = User.find(params[:id])
@user.update_attributes(:project_ids => params[:project_ids].split(","))
我不知道如何自动发送参数,因此我使用split
。我不知道使用HABTM时订单是否合适。如果没有,则应将has_many :through
与“订单”或“排名”列结合使用。我向你展示的方式不适用,因为你还需要设置订单栏。
希望它有效。 :)