Как правильно заставить рельсы переопределять именование Foreign_key в ассоциации

Я уверен, что это очень простой вопрос, и я видел похожие вопросы, но я все еще в замешательстве. Я очень неопытен с RoR - прошу прощения за мое невежество!

Я установил mvc классы, используя scaffolding в устаревшей базе данных (через schema_to_scaffold). Когда я открываю 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" и связанный "my_revisions", (Первое, что меня смущает, это то, что соответствующие файлы модели MyNc а также MyRevision не показывай что я ожидал self.primary_key='ID_NC' а также self.primary_key='ID_REVISION' но не бери в голову)

Теперь я пытаюсь настроить эту ассоциацию и вложенную маршрутизацию, чтобы иметь возможность иметь URL-адрес, как, скажем, /my_ncs/6/my_revisions дай мне все my_revisions для my_nc с ID_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,

Что я делаю неправильно?

Большое спасибо заранее!

1 ответ

Вы также должны указать 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.

Другие вопросы по тегам