Rails ассоциация через SHA1, а не id - PullRequest
2 голосов
/ 04 мая 2011

Я пытаюсь связать две таблицы на SHA1, а не делать поиск для SHA1 по таблицам и связывать идентификатор через.

Мои модели

class Dataset < ActiveRecord::Base
   belongs_to :dataset_hash
end

class DatasetHash < ActiveRecord::Base
   has_many :datasets
end

Я пытался связать, используя

  has_many :datasets, :finder_sql => 'Select datasets.* FROM datasets LEFT JOIN dataset_hashes ON datasets.dataset_hash=dataset_hashes.hash WHERE dataset_hashes.hash=#{dataset.dataset_hash}'

, но я просто получаю ошибку

DatasetHash (# ...) ожидается, получил String (# ...)

1 Ответ

2 голосов
/ 05 мая 2011

Можно использовать :foreign_key и :primary_key, доступные в принадлежат_ к и has_many :

class Dataset < ActiveRecord::Base
   belongs_to :dataset_hash, :primary_key => "dataset_hash", :foreign_key => "hash"
end

class DatasetHash < ActiveRecord::Base
   has_many :datasets, :primary_key => "hash", :foreign_key => "dataset_hash"
end
...