2015-11-07 1 views
0

Когда я хочу создать присоединиться стол, что я читал из rubyguides, что я могу установить индекс непосредственно следующим образом:Создание Join-таблицы с индексами в Rails

create_join_table :products, :suppliers do |t| 
    t.index [:product_id, :supplier_id] 
    t.index [:supplier_id, :product_id] 
end 

Но при поиске больше на эту тему Я прочитал я должен добавить индекс после того, как таблица создана:

add_index(:products_suppliers, [:product_id, :supplier_id], :unique => true) 

ли Rails (4) понимать первый подход, или лучше, чтобы добавить индекс после моей таблицы создается?

Могут ли мои два примера указать один и тот же индекс или они два разных?

+0

Попробуйте один из способов: 'rake db: migrate', проверьте' schema.rb', затем 'rake db: rollback' и попробуйте другой способ. Кроме того, первый раздел кода, который вы опубликовали, не соответствует коду в указанной вами ссылке. – Jason

+0

Во втором примере вы добавляете ограничение уникальности. Я не думаю, что вы можете добавить ограничение уникальности внутри блока в первом примере (странный Rails quirk). Итак: если вы хотите индекс и уникальность, вы должны сделать это вторым способом. – dwenzel

+0

Хорошо, спасибо большое! Это то, о чем мне было интересно :) – MMachinegun

ответ

0

Хорошо, когда @Jason указал я попробовал оба пути, и оказывается, что это работает точно так же :)

create_join_table :products, :suppliers do |t| 
    # either directly here 
    t.index [:product_id, :supplier_id], :unique => true 
end 

# or afterwards, both work 
add_index(:products_suppliers, [:product_id, :supplier_id], :unique => true) 

даже определение uniqueness работы в первом примере.