Я работал над некоторыми проблемами, получая рельсы, чтобы вести себя хорошо с 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, поэтому мог бы это сделать.
Rails использует множество соглашений. В этом случае вы нарушаете правило, что has_many :ingredients
на Recipe
означает, что таблица ingredients
должна иметь recipe_id
. Очевидно, что вам, вероятно, нужны ингредиенты, разделяемые между многими рецептами, и поэтому для этого вам понадобится has_and_belongs_to_many
с таблицей соединений (для которой вы создадите другую миграцию).
Я предлагаю вам начать с помощью этого руководства для всестороннего обзора того, как это работает в Rails.