Задать вопрос
bismoney
@bismoney

Ruby and Rail связать две таблицы?

Привет, делаю категории. Но никак не могу понять одной фишки.
Ниже я привел то что делаю.
Как видно я создал таблицу posts_category для категорий.

А на странице posts/new
мне выдается ошибка о отсутствии в базе таблицы categories.
Откуда она берется? Как заставить его кушать именно posts_category?

class CreatePostsCategory < ActiveRecord::Migration
  def change
    create_table :posts_category do |t|
      t.string :name
      t.integer :user_id

      t.timestamps
    end
  end
end


class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.integer :user_id
      t.string :title
      t.text :description
      t.belongs_to :category

      t.timestamps
    end
  end
end


class Posts < ActiveRecord::Base
  belongs_to :category
end


В шаблон
<%= f.collection_select :category_id, Category.order(:name), :id, :name %>
  • Вопрос задан
  • 346 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
согласно конвенции rails не может быть таблички с именем posts_category

может быть post_categories - когда у одной категории много постов, связь 1 ко многим и могут быть таблицы categories и posts_categories - связь многие ко многим

Т.е в вашем случае скорее всего должна быть табличка post_categories и везде belongs_to :post_category
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ibub1ik
@ibub1ik
Ruby/Rails Dev => Elixir
Попробуй заменить t.belongs_to :category на t.belongs_to :category, references: :posts_categories.
Естественно, придется и в самих моделях указать правильный foreign_key и class_name, иначе работать не будет (несмотря на успешную миграцию). Помни, что Rails - это Convention Over Configuration, отступаешь от конвенций - будь добр указать кучу параметров (о существовании которых ты мог даже не подозревать).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
OTKLIK POWER Москва
от 80 000 до 150 000 ₽
от 6 000 до 8 000 $
Netwrk Буэнос-Айрес
от 5 000 до 7 500 $