2016-06-16 4 views
1

私には「has_many:through」という2つのモデルがあります。それはうまくいっていますが、それぞれの組み合わせに対して一意の順序付けを追加する必要があります。 のは、我々はモデル電車や馬車(鉄道運送)を持っており、各列車は客車例えばRails 4+ has_many:ユニークな順序付けを使用したアソシエイティブ

# /models/train.rb 
class Train < ActiveRecord::Base 
    has_many :carriages, through: :combinations 
end 

# /models/carriage.rb 
class Carriage < ActiveRecord::Base 
    has_many :trains, through: :combinations 
end 

# /models/combination.rb 
class Combination < ActiveRecord::Base 
    belongs_to :train 
    belongs_to :carriage 
end 

# /controllers/trains_controller.rb 
class TrainsController < ApplicationController 
    def shortcut_params 
    params.require(:train).permit(:name, :description, carriage_ids: []) 
    end 
end 

# /views/trains/_form.html.erb 
<div class="field"> 
    <%= f.label :carriage_ids, 'Choose Carriages' %><br> 
    <%= f.select :carriage_ids, Carriage.all.collect { |x| [x.name, x.id] }, {}, multiple: true, size: 6 %> 
</div> 

のユニークな組み合わせを持っているとしましょう:この例では

train_1 = carriage_5, carriage_4, carriage_1, carriage_3, carriage_2, carriage_6 
train_2 = carriage_6, carriage_5, carriage_3, carriage_1, carriage_2, carriage_4 
train_3 = carriage_1, carriage_2, carriage_3, carriage_4, carriage_6, carriage_5 

が持っているcarriage_5:

  • 列車1の最初の場所、
  • tの2番目の場所rain_2、
  • train_3の最後の場所。

これは、https://stackoverflow.com/a/19138677/4801165のようなソリューションを使用できないことを意味します。これは、パラメータを注文するためのパラメータがないためです。

データベースでは、1から5まで(最低のIDから最も高いIDまで)保存していることがわかります。したがって、IDを1つずつ追加するソリューションがあるかもしれませんか?

各列車の正しい発注を得るための簡単な解決策があることを願っています。 おかげ

+0

あなたはカスタムポジションテーブルを持っていて、それによって結合して注文することができます。カスタム注文をする可能性もありますが、それ以上のモデルを追加すると面倒です。ここには、そのトピックについての[要点](https://gist.github.com/cpjolicoeur/3590737)があります –

答えて

0

あなたがTrainCarriageの位置を示すあなたのCombinationモデルにposition属性を追加することができます。

関連する問題