Уникальность Rails в несколько столбцов, но записи для линейной диаграммы истории сохраняются позже

В моем приложении rails есть модель Rates, которая состоит из множества разных таблиц/ссылок для каждого столбца. Единственная реальная переменная — это мой столбец Cost (я ввожу сумму в долларах) и столбцы created_at и updated_at по умолчанию.

В моем индексе ставок в настоящее время я показываю все существующие в настоящее время ставки, модели и схемы ниже:

Rates Table      

create_table "rates", force: :cascade do |t|
    t.integer  "origin_id"
    t.integer  "destination_id"
    t.integer  "carrier_id"
    t.integer  "shipment_category_id"
    t.decimal  "cost",                 precision: 10, scale: 2
    t.integer  "unit_of_measure_id"
    t.datetime "created_at",                                    null: false
    t.datetime "updated_at",                                    null: false
    t.integer  "seller_id"
    t.index ["carrier_id"], name: "index_rates_on_carrier_id", using: :btree
    t.index ["destination_id"], name: "index_rates_on_destination_id", using: :btree
    t.index ["origin_id"], name: "index_rates_on_origin_id", using: :btree
    t.index ["seller_id"], name: "index_rates_on_seller_id", using: :btree
    t.index ["shipment_category_id"], name: "index_rates_on_shipment_category_id", using: :btree
    t.index ["unit_of_measure_id"], name: "index_rates_on_unit_of_measure_id", using: :btree

Rates Model
  belongs_to :origin, :class_name => 'Port'
  belongs_to :destination, :class_name => 'Port'
  belongs_to :seller, :class_name => 'Carrier'
  belongs_to :carrier
  belongs_to :shipment_category
  belongs_to :unit_of_measure

Я собирался создать миграцию, используя это решение, которое я нашел ( https://stackoverflow.com/a/34425284/7631715 ).

Дело в том, что я не хочу, чтобы это помешало мне импортировать «дубликаты» данных позже. Поскольку ставки от разных продавцов (seller_id) со временем меняются, я хотел сохранить эти данные, чтобы позже я мог построить линейный график, чтобы увидеть изменение стоимости с течением времени.

По сути, мой конечный продукт, я хочу, чтобы моя страница (индекс) просто показывала ставки, которые не являются дубликатами, и если они дублируются, отображать только добавленные/созданные ставки (последние созданные, будут текущей действительной ставкой.)

Стоит ли мне вообще создавать эту миграцию, чтобы добавить уникальность/ограничение? Или я должен просто сделать это на уровне контроллера. Если контроллер, как мне это сделать?

Спасибо,


person vinicomelo    schedule 21.03.2017    source источник
comment
Не понятно, что вы спрашиваете. Насколько я понимаю, вы рассматриваете ограничение уникальности для одного поля или вместе с другим полем. И я вижу, что вы заинтересованы в том, чтобы добавить ограничение на уровне базы данных или в проверке ActiveRecord. Кроме того, я не могу следовать. Какова цель?   -  person moveson    schedule 21.03.2017
comment
Извините, поэтому я хочу добавить много оценок. Но на моем индексе/главной странице я хочу показать только самые последние/активные (самые последние created_at), если происхождение, продавец, перевозчик, стоимость и т. д. одинаковы. Но скажем, я добавляю новый тариф, который имеет все те же значения, за исключением стоимости (например, дешевле), я хочу отображать только этот новый более дешевый тариф, потому что он был добавлен последним, поэтому текущий действительный / пригодный для использования показатель.   -  person vinicomelo    schedule 21.03.2017
comment
Я предполагаю, что по ставкам вы имеете в виду поле cost. Если это так, то вы не можете иметь ограничение уникальности только для поля cost ни на уровне базы данных, ни на уровне ActiveRecord. На индексной странице вы захотите отфильтровать и отсортировать по created_at, выбрав только самую последнюю запись. Если вы хотите спросить о том, как сделать этот фильтр и сортировку, вам нужно задать новый вопрос.   -  person moveson    schedule 22.03.2017