2016-05-30 2 views
2

У меня есть следующая настройка для обработки категорий и подкатегорий.Rails добавление ссылки на связанные модели

Category.rb

class Category < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :name, use: :slugged 

    has_many :subcategories 
    has_many :products ,:through => :subcategories 
end 

Subcategory.rb

class Subcategory < ActiveRecord::Base 
    belongs_to :category 
    has_many :products 
end 

Product.rb

class Product < ActiveRecord::Base 
    acts_as_taggable 
    extend FriendlyId 
    friendly_id :name, use: :slugged 
    belongs_to :subcategory 
end 

Мне нужно добавить CATEGORY_ID ли: целое & subcategory_id: целое к модель продукта заставляет ее работать, или Rails обрабатывает это для меня автоматически?

ответ

2

Да, вам нужно добавить category_id и subcategory_id в файл миграции моделей, чтобы заставить его работать. Rails не делает этого для вас, если вы не используете синтаксис rails generate. Для примера. первым вы создаете Category модели

rails generate model Category name:string 

Затем вы создаете Subcategory модели проходящей категорию как ссылки.

rails generate model Subcategory name:string category:references 

А затем создать Product модели проходящей подкатегорию как ссылки

rails generate model Product name:string subcategory:references 

Это автоматически добавит category_id и subcategory_id к миграции файлам. Вам придется сами писать отношения в своей модели (т. Е. Только часть has_many)

Если вы не сделали это по ошибке, вы можете создать новую миграцию командой rails generate или вручную.

rails g migration AddCategoryRefToSubcategories category:references 
rails g migration AddSubcategoryRefToProducts subcategory:references 

Это создаст соответствующие файлы миграции перелетных для вас, а затем запустить rake db:migrate. :)

+0

Hi Kumar, Как я буду писать это как миграцию? (рельсы генерируют миграцию AddReferenceToProducts), то добавьте другой ответ? – Jonathan

+1

'rails generate migration AddSubcategoryRefToProducts подкатегория: ссылки' Это должно создать соответствующую миграцию. – Kumar

+0

Будет ли мне также делать то же самое с категорией Category = Subcategory? – Jonathan

0

Я не думаю, что вам нужно добавить category_id:integer & subcategory_id:integer в Модель продукта.

они должны быть записаны в файле миграции. например:

create_table :products do |t| 
    t.references :category, :subcategory 
    ... 
end 

Или, может быть, я не понял ваш вопрос?

+0

Я создал модель продукта перед категорией, ссылается ли только на создание ID? – Jonathan

+0

извините за последнее время. rails g migration AddCategoryToProduct, вы получите файл миграции, а затем вы можете вручную добавить 'add_column: products,: category_id,: integer' то же самое для подкатегории. –

Смежные вопросы