Как правильно заставить рельсы переопределять именование 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.