Вопрос по ruby-on-rails – Как установить составной ключ в приложении Rails

6

Я использую «foriegner» драгоценный камень в моем приложении, чтобы установить первичный ключ, теперь я нахожусь в ситуации, чтобы установить составной первичный ключ в таблице.

Я искал в Интернете для этого, но не смог найти четкого решения для этого.

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

Note : I am using Postgres

Благодарю.

Хорошо ... я должен отказаться от идеи использования композитного ключа ..? balanv
Проблема в том, что вы пропустите много «Rails Magic». и делать много дополнительной работы, например, писать sql в миграциях, которые связывают его с конкретной БД ... Другие фреймворки, которые я предлагаю, лучше поддерживают такие особые ситуации Alexander Günther
Да, я уверен, что мне нужно использовать составной ключ. Таким образом, составные ключи не должны использоваться в рельсах ... и если мы их используем, это создаст некоторые проблемы? balanv
1. Вы уверены, что они вам нужны? 2. Если да, уверены ли вы, что Rails подходит для вашего приложения? AFAIK: рельсы и составные ключи совсем не дружат, это противоречит философии Rails по их использованию. Таким образом, вы будете часто сражаться с фреймворком, если собираетесь их использовать. Alexander Günther
То, что вы собираетесь сделать, это ваше решение. Я думаю, вы должны знать о последствиях ваших решений. Например, если вы решите использовать составные ключи на книге, которая является моделью ActiveRecord, ваши помощники * _book_path в рельсах не будут работать из коробки. Ваши миграции нуждаются в дополнительной работе ... Но если вы не собираетесь использовать составные ключи, у вас могут возникнуть более серьезные проблемы. Я не знаю вашу ситуацию, и вы сами должны решить, будет ли это разумно, что вы хотите сделать, прежде чем делать это. Alexander Günther

Ваш Ответ

2   ответа
2
ActiveRecord

composite_primary_keys и объединяет эти функции вполне для ActiveRecord.

Поддерживаетширокий спектр версий ActiveRecord.

# Gemfile
gem 'composite_primary_keys', '=<version for your AR version>'

Используйте это как в следующем примере:

class Membership < ActiveRecord::Base
  self.primary_keys = :user_id, :group_id
end

membership = Membership.find([1,1])  # composite ids returns single instance
# => <Membership:0x39218b0 @attributes={"user_id"=>"1", "group_id"=>"1"}>

Я с радостью использую его в производстве, сохраняя свою схему в чистоте и порядке.

Better alternative: Sequel

Как всегда, если вы ищете отличное решение для Ruby + PostgreSQL, не смотрите дальшеjeremyevans/sequel.

Он поставляется с огромным количеством функций, в том числеcomposite primary keys, Из коробки.

Так что если вы начинаете новый проект (очевидно, на PostgreSQL), избавьте себя от головной боли ActiveRecord и продолжайте с Sequel.

class Post < Sequel::Model
  set_primary_key [:category, :title]
end
3

НЕ используйте композитные PK в Rails (если только вы не обязаны это делать из-за устаревшей БД).

Хотя могут быть решения с гемами, которые работают (в настоящее время), это просто не тот способ, которым работает ActiveRecord. Я также не буду использовать составные PK вне Rails, если на то нет веской причины. Они делают многое более сложным.

Но: ничто не мешает вам иметь то, что вы думаете о составном первичном ключе в качестве альтернативного ключа, и иметь PK по умолчанию в Rails (postgres: псевдотип 'serial', который извлекает свои значения из последовательности). Просто убедитесь, что вы добавили уникальный индекс для тех столбцов, которые составляют ваш ключ.

Ваш вопрос, вероятно, лучше ответить здесьstackoverflow.com/questions/26078535/…
@ Oververryd спасибо за ссылку! Я все еще не согласен, хотя :-) Я думаю, что ответ действителен для Rails. Независимо от того, что вы думаете о составных ПК в SQL в целом. Поддержка является неоптимальной в Rails, поэтому лучше ее не использовать. ПО МОЕМУ МНЕНИЮ.
Есть много веских причин для использования составных первичных ключей. Этот ответ просто неверен и исходит из защитной ограниченной точки зрения ActiveRecord.
... и есть много веских причин. то есть, работая над существующей базой данных, заполненной композитными ПК. Таким образом, просто возобновить стресс "не используй" это не так ...
Вот что я сказал: в Rails. Если нет веской причины. Пожалуйста, уточните ... в каких случаях вы бы использовали составной ключ?

Похожие вопросы