@ W.M. Если вам нужно выбрать один, используйте ограничение базы данных. Это будет работать, даже если с вашими данными взаимодействуют разные приложения, не относящиеся к RoR, и обеспечивает согласованность в течение длительного времени.

лизую функциональность, чтобы отслеживать, какие статьи прочитал пользователь.

  create_table "article", :force => true do |t|
    t.string   "title"
    t.text     "content"
  end

Это моя миграция до сих пор:

create_table :user_views do |t|
  t.integer :user_id
  t.integer :article_id
end

Таблица user_views всегда будет запрашиваться для поиска обоих столбцов, а не только одного. Мой вопрос в том, как должен выглядеть мой индекс. Есть ли разница в порядке этих таблиц, если есть еще какие-то варианты или что-то еще. Моя целевая база данных - Postgres.

add_index(:user_views, [:article_id, :user_id])

Благодарю.

ОБНОВИТЬ:
Поскольку может существовать только одна строка, содержащая одинаковые значения в обоих столбцах (поскольку, зная, что user_id прочитал article_id), я должен рассмотреть вариант: unique? Если я не ошибаюсь, это означает, что мне не нужно выполнять какую-либо проверку самостоятельно и просто вставлять каждый раз, когда пользователь посещает статью.

Ответы на вопрос(2)

Ваш ответ на вопрос