質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1974閲覧

主キーはデフォルトのidのまま、外部キーのみを指定して、関連テーブルを参照したいです。(外部キーにしているカラムを主キーにすれば解決しますが、そうしたくないため)

qaz3330

総合スコア113

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/07/31 15:30

編集2016/07/31 15:34

Ruby on Railsで、ECサイトのスクレイピング処理を実装しております。

・ECサイトの情報を保持するStoreテーブル
・過去の情報を保持するHistoryテーブル

があり、

Store - id(主キー) - name - site_id
History - site_id(主キー) - ranking

といったテーブル構成になっております。

スクレイピングをしているため、Historyテーブルの主キーはECサイト側で保持しているsite_idが主キーになります。

そのため、私が管理しているRailsアプリケーションのStoreのidを外部キーにして
参照することができません。

尚、Storeテーブルの主キーをsite_idにすれば解決しますが、今回はそうしたくありません

そうしたくない理由は、StoreテーブルのリレーションがHistoryだけでなく、UserやServiceテーブルとリレーションがあり、idが主キーであった時からの改修が発生するのと、仮に、site_idを主キーとした場合、
Storeを画面から登録するときに、site_idを間違えて登録してしまった時のバグに気が付きにくくなることを懸念しております。

今回やりたいこと

Storeの主キーはidのまま、site_idを外部キーに渡して、Historyテーブルを参照するようにしたいです。

次のような実装方法を試してみたものの、ダメで、主キーである、site_idを元にhisotryテーブルを参照してしまいます・・・

本件に対する解決案がありましたら、アドバイスを頂きたく存じます。

よろしくお願いします。

class Store < ActiveRecord::Base has_many :histories, foreign_key: 'site_id', class_name: 'History', dependent: :destroy end
class History < ActiveRecord::Base belongs_to :store, foreign_key: 'site_id', class_name: 'Store' end

尚、こういうことも試しましたが、
こうすると、既存のstoreのidがsite_idに書き換わってしまうため、断念しました。

class Store < ActiveRecord::Base self.primary_key = :site_id end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

アソシエーションにprimary_keyとforeign_keyの両方を指定すれば動きました!

投稿2016/08/01 13:17

qaz3330

総合スコア113

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問