2

これは非常に基本的な質問だと確信しており、関連する質問を見てきましたが、まだ混乱しています。私は RoR に非常に不慣れです - 私の無知を許してください!

( schema_to_scaffoldを介して) レガシー データベースで scaffolding を使用して mvc クラスをセットアップしました。schema.rb を開くと、主キーがデフォルト以外の名前で正しく識別されていることがわかります。

 create_table "my_ncs", primary_key: "ID_NC", force: true do |m| 

   # etc...

 end

 create_table "my_revisions", primary_key: "ID_REVISION", force: true do |m|
   m.decimal "ID_NC", precision: 10, scale:0, null: false 

   # etc ...

 end

"my_nc"oneと関連付けられた の間には、1 対多の関係があり"my_revisions"ます。(私を混乱させる最初のことは、対応するモデルファイルMyNcMyRevisionが私が期待したものを表示しないということです:しかし気self.primary_key='ID_NC'にしないでくださいself.primary_key='ID_REVISION'

今、私はこの関連付けとネストされたルーティングを設定して、with/my_ncs/6/my_revisionsのすべてを私に与えるような URL を持つことができるようにしようとしています。my_revisionsmy_ncID_NC=6

これは私がそれをやろうとしている方法です:

class MyNc < ActiveRecord::Base
  has_many :MyRevisions
end

class MyRevision < ActiveRecord::Base
  belongs_to :MyNc, foreign_key: 'ID_NC'
end 

今、私はrails consoleこれをテストするために を使用しようとしていますが、これは私が完全に混乱するときです:

irb(main):001:0> n = MyNc.find(6)
  MyNc Load (0.0ms)  SELECT  `my_ncs`.* FROM `my_ncs`  WHERE `my_ncs`.`ID_NC` = 6 LIMIT 1
=> #<MyNc ID_NC: 6, etc...>

irb(main):002:0> n.MyRevisions
  MyRevision Load (22.0ms)  SELECT `my_revisions`.* FROM `my_revisions`  WHERE `my_revisions`.`my_nc_
id` = 6
Mysql2::Error: Unknown column 'my_revisions.my_nc_id' in 'where clause': SELECT `my_revisions`.* FROM `my
_revisions`  WHERE `my_revisions`.`my_nc_id` = 6

my_nc_idの代わりに、foreign_keyのデフォルト名が使用されID_NCます。

私は何を間違っていますか?

よろしくお願いします!

4

1 に答える 1

3

foreign_keyまた、has_many関連付けで指定する必要があります。

class MyNc < ActiveRecord::Base
  has_many :my_revisions, foreign_key: 'ID_NC'
end
class MyRevision < ActiveRecord::Base
  belongs_to :my_nc, foreign_key: 'ID_NC'
end

Ruby の規則に従うように関連付けの名前を変更したことに注意してください。

于 2015-05-22T11:30:38.820 に答える