2016-06-16 2 views
1

У меня есть две модели с «has_many: через». Он работает хорошо, но мне нужно добавить уникальный порядок для каждой комбинации. Скажем, у нас есть модель поезда и вагоны (железнодорожный вагон) и каждый поезд имеет уникальную комбинацию вагонов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,
  • второе место в т rain_2,
  • Последнее место в поезде_3.

Это означает, что я не могу использовать такое решение https://stackoverflow.com/a/19138677/4801165, потому что у меня нет параметров для заказа вагонов.

В базе данных я вижу, что transport_ids сохраняет от 1 до 5 (от самого низкого до максимального id), так может быть решение для добавления идентификаторов по одному?

Надеюсь, что есть простой способ получить правильный порядок перевозки для каждого Поезда. Благодаря

+0

У вас может быть таблица пользовательских позиций, а затем присоединиться и заказать. Существует также возможность делать индивидуальный заказ, но это будет беспорядочно, когда вы добавляете больше моделей. Вот [gist] (https://gist.github.com/cpjolicoeur/3590737), который касается именно этой темы –

ответ

0

Я попытался использовать совет Фреда Уиллмора, но этот дополнительный столбец не нужен, если вы используете вложенные формы для добавления вручную каждого элемента. Вы можете найти Gem здесь https://rubygems.org/gems/cocoon и использовать этот хороший гид с Стандартные Rails Formshttps://github.com/nathanvda/cocoon/wiki/ERB-examples.

0

Вы можете добавить атрибут position к вашей Combination модели, обозначающее положение Carriage внутри Train.

Смежные вопросы