Может ли кто-нибудь найти мою синтаксическую / логическую ошибку для «неизвестного атрибута» при создании начального метода для таблицы соединений «многие ко многим» в Rails? - PullRequest
0 голосов
/ 02 февраля 2019

Проект заключается в создании веб-приложения, которое я буду использовать для регистрации и отслеживания моих тренировок.Одна из таблиц / моделей представляет собой объединяющую таблицу, связывающую упражнения и обученные части тела.

Вот миграция для таблицы упражнений:

# migration: successfully creates the join table
class CreateExerciseBodyparts < ActiveRecord::Migration[5.2]
  def change
    create_table :exercise_bodyparts do |t|
      t.references :exercise, foreign_key: true
      t.references :bodypart, foreign_key: true
      t.timestamps
    end
  end
end

Вот исходные данные для таблицы:

# seed data snippet: no syntax errors here
def exercise_bodyparts_list
  return [
    {
      name: "Barbell Back Squats",
      bodyparts: ["Quads","Hamstrings","Adductors","Abductors","Glutes","Lower Back","Abs"]
    },
    {
      name: "Barbell Biceps Curls ~0°",
      bodyparts: ["Biceps","Forearms"]
    },
    {
      name: "Barbell Biceps Curls ~45°",
      bodyparts: ["Biceps","Forearms"]
    },
    #(...)
  ]
end

Вот мой начальный метод для заполнения БД:

# seed method: where the error comes...
exercise_bodyparts_list.each do |ex_body|
  ex_body[:bodyparts].each do |bodypart|
    ExerciseBodypart.create!(
      exercise: Exercise.find_by_name(ex_body[:name]),
      bodypart: Bodypart.find_by_name(bodypart)
      )
  end
end

Вот сообщение об ошибке:

# error message:
ActiveModel::UnknownAttributeError: unknown attribute 'exercise' for ExerciseBodypart.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Я получил совет от другого разработчика Ruby, который сказал, что я должен назвать природу отношений в модели с belongs_to

Я действительно сделал это, и логика работает хорошо.

Моя модель выглядит так:

class ExerciseBodypart < ApplicationRecord
  belongs_to :exercise
  belongs_to :bodypart
end

Вот и вот, это был ключ.Такое отношение в модели не существует в моем другом проекте;однако я подозреваю, что связь взята из соединения других моделей - поскольку это более сложная база данных с большим количеством моделей.

0 голосов
/ 02 февраля 2019

Я не знаю точную причину, но она работала для меня внутри rake задачи в rails-3, но не удалась для rails-5 при обновлении приложения до более поздней версии.

Я предлагаю вам попробовать следующее, следующееработал на меня,

exercise_id: Exercise.find_by_name(ex_body[:name]).id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...