Редактировать: После доработки этого поста я пришел к выводу, что ваши отношения между Materia и DatosMateria неверны. Похоже, у вас есть принадлежащие назад и has_many назад. Вы упоминаете, что materias.codigo и datos_materia.id являются первичными ключами. То, что вы хотите присоединиться к первичному ключу materia, подразумевает, что materia должно иметь много datos_materia, а не наоборот, как определяются ваши ассоциации.
Вкратце: описание ваших ассоциаций и проблем, похоже, пытались сохранить первичный ключ одной стороны отношения один-ко-многим в качестве внешнего ключа для многих сторон. Это не так, как работают реляционные базы данных. Обычно они используют принцип «один ко многим», в котором первичный ключ связанной записи будет храниться как внешний ключ.
Похоже, некоторые вещи потерялись в переводе. Итак, вот лучшее объяснение того, что не так с вашими отношениями.
Rails ожидает, что внешние ключи будут называться "# {foreign_class} _id", и будет хранить идентификатор, связанный с внешним классом. Внешний ключ всегда находится на стороне принадлежащих вещей.
С отношениями, определенными в вопросе.
Все вспомогательные методы ассоциации, вызываемые в DatosMateria или его экземпляре, присоединяются к datos_materia.id = materias.codigo
.
Там, где ожидается, что foreig \ n_key будет materias.codigo. Но materias.codigo - первичный ключ, так как материя может быть связана с datos_materia?
@datos_materia.materias.create
Создаст новую запись Материи с @ datos_materia.id, хранящуюся в столбце Материи codigo. Где при установлении отношений, наоборот, будет создан новый материал с @ datos_materia.materia_codigo, который хранится в столбце codag материалов.
Materia.create(:datos_materia => @datos_materia)
Вспомогательные методы ассоциирования, вызываемые в Materia, или их экземпляры присоединяются к datos_materia.id = materias.materia_codgio
Простого исправления не существует. Вам нужно будет переопределить ваши модели и полностью переработать ваши таблицы. Предполагая, что вы пытаетесь настроить, что одна материя имеет много datos_materia. Вот правильно определенные отношения, которые вы собирались:
class DatosMateria < ActiveRecord::Base
set_table_name 'datos_materia'
belongs_to :materias, :foreign_key => :materia_codigo
end
class Materia < ActiveRecord::Base
has_many :datos_materias, :foreign_key => :materia_codigo
end
Однако, если вы правильно определили свои отношения, ваша сумма будет работать должным образом.