rails mysql ошибка - возможно, таблицы не связаны

0

Я работал над некоторыми проблемами, получая рельсы, чтобы вести себя хорошо с sqllite и решил перейти к mysql.

Я запустил rake db: create и rake db: schema, и предположил, что все в порядке, но затем в таблицах mysql show отображается полная таблица.

Я создал миграцию с данными о создании таблицы и выполнил rake db: migrate, и теперь отображаются все таблицы.

К сожалению, похоже, что связь между таблицами не работает.

Приложение представляет собой довольно простое приложение для рецептов. Таблицы

recipes
ingredients
steps

таблица ингредиентов была той, которая не была создана в db: create или db: schema.

Я создал таблицу ингредиентов с

class AddIngredientsTable < ActiveRecord::Migration
  def self.up
        create_table :ingredients do |t|
            t.string    :ingredient
            t.float     :amount
            t.string    :measure
            t.string    :description
        end
  end

В моей модели рецептов у меня есть has_many: ингредиенты, а моя модель моих ингредиентов принадлежит: recipe

Ошибка, которую я получаю,

Mysql::Error: Unknown column 'ingredients.recipe_id' in 'where clause': SELECT     `ingredients`.* FROM       `ingredients`  WHERE     (`ingredients`.recipe_id = 1)

и, конечно, ошибка верна, что в каждой таблице не существует поля recipe_id. Но у меня нет такого запроса в контроллере, который просто читает

  def show
    @recipe = Recipe.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @recipe }
    end
  end

Любые предложения относительно того, что искать и почему эта проблема могла возникнуть, и как ее исправить?

Я бы предпочел не вручную выписывать sql, поскольку я понимаю, что на данном этапе это не путь рельсов, хотя я знаком с sql, поэтому мог бы это сделать.

Теги:

1 ответ

1
Лучший ответ

Rails использует множество соглашений. В этом случае вы нарушаете правило, что has_many :ingredients на Recipe означает, что таблица ingredients должна иметь recipe_id. Очевидно, что вам, вероятно, нужны ингредиенты, разделяемые между многими рецептами, и поэтому для этого вам понадобится has_and_belongs_to_many с таблицей соединений (для которой вы создадите другую миграцию).

Я предлагаю вам начать с помощью этого руководства для всестороннего обзора того, как это работает в Rails.

  • 0
    конечно! хотя в этом состоянии ингредиенты связаны только с одним рецептом, хотя я внесу это изменение позже, поэтому вместо изменения has_and_belongs_to_many я создал новую миграцию и добавил recipe_id в таблицу ингредиентов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню