2011-01-08 18 views
-1

私は2つのモデル、ユーザー、プロジェクトを持っています。今は、has_and_belongs_to_many接続(多数対多)によって接続されています。ユーザーにはプロジェクトのリストがあり、このリストはajaxでソート可能です。しかし、私はこの注文を保存したい。この注文と店舗を適切な方法でどのように送ることができますか?私はjQueryUIで動作sorteable一覧へAjaxリストにアイテムの並び順を保存するにはどうしたらいいですか?

答えて

1

でデータを送信

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

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

var data = {"list": projects}; 

が、あなたはプロジェクトのオーダーで考えなければなりませんユーザーとプロジェクトの関係の属性としてユーザーリストに表示します。ユーザー/プロジェクトの各ペアには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 

こうすることで、与えられたユーザーに割り当てられているプロジェクトごとに、注文を指定することができます。

こちらがお役に立てば幸いです。

+1

テーブルのIDは正しくなければなりませんか?私はあなたがHABTMテーブルを作成するときにはid:> falseを使うと思った。 – RobinBrouwer

+0

私はajax注文を保存することはできますか? –

+0

Oguz、Ajaxは、ブラウザからサーバーへの通信の単なる方法です。 Ajax自体は何も保存も注文もしません。あなたがjavascriptでリストを保存して注文することを意味するのであれば、私はManu Moraの解決策は良い方法だと思います。もしあなたがミスウインドをしたら、すみません。 –

1

あなたができることは、すべての項目をJavascriptでループし、AJAXを使用してRailsアクションにIDの配列を送信することです(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に「注文」または「位置」の列を使用する必要があります。注文列を設定する必要があるので、私があなたに示した方法では動作しません。

希望します。 :)

関連する問題