1

私は私のレールアプリにインポートしたMYSQLでいくつかのオープンgovデータを使用しています。ActiveRecord双方向外部キー。

私は自分のテーブルのいくつかを使ってデータベースを拡張し、テーブルに列IDを提供しました。

ただし、元のデータベースのテーブルは一意の「ndb」IDでリンクされています。

:foreign_key=>'ndb'モデル間で2つのテーブルを相互参照すると、テーブルが正しくリンクされると思っていましたが、:foreign_keyによって、別のテーブルのIDと1つのテーブルのIDをリンクしているようです。

私のモデルは「NDB」欄は、食品と重みテーブルとの間のリンクではなく、NDBするfood_idであることを指定する方法があります。この

 
class Food < ActiveRecord::Base 
has_many :weights, :foreign_key=>'ndb' 
has_many :food_names 
end 

class Weight < ActiveRecord::Base 
belongs_to :food, :foreign_key=>'ndb' 

のように見えますか?

答えて

0

私がおそらく一時的な解決策として行ったことは、:finder_sqlを使用してテーブルをリンクすることです。

 
class Food < ActiveRecord::Base 
    has_many :weights, :finder_sql =>'Select weights.* FROM weights LEFT JOIN foods ON foods.ndb=weights.ndb WHERE foods.id=#{id}' 

私はこれが最善の解決策であるかどうかわからないんだけど、それが動作しているようだ:

マイフードモデルが今持っています。

0

ARクラスでset_primary_key 'ndb'を試しましたか?

set_primary_key docs。

+0

私はそれを試していませんでしたが、他のクエリで_idフィールドを使用する必要があります。なぜなら、 'ndb'フィールドを通してすべてがリンクされているわけではないからです。私は標準のレールIDを使用していますが、時には 'ndb to ndb'にリンクする必要があります – pedalpete

+0

よく、それらを必要とするテーブルに対してset_primary_keyを使用して、 find()のように動作します。また、関連付けのデフォルトを設定します。 – noodl

+0

申し訳ありませんが、私は明らかではないかもしれません。食べ物のテーブルのようなものは、idフィールドを70%の時間(レールの基準に固執する)、もう一方の30%の時間を使用して、その食物テーブルをndbフィールドの重みのような別のテーブルにリンクする必要があります。モデル上でset_primary_keyを設定すると、それらの関係の70%が破損します。私は何か他のものが欠けていない限り。 'ndb'をプライマリキーに設定すると、IDが2つのテーブルをfood_idに接続できないようです – pedalpete