2016-05-30 4 views
2

カテゴリとサブカテゴリを処理する次の設定があります。関連モデルへの参照を追加するレール

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 generateの構文をうまく使っていない限り、Railsはあなたのためにそれをしません。 たとえば、まず、あなたはCategoryモデル

rails generate model Category name:string 

次にあなたが参照としてSubcategoryモデル渡すカテゴリを作成を作成します。

rails generate model Subcategory name:string category:references 

そしてあなたはこれを自動的に移行ファイルにcategory_idsubcategory_idが追加されます参照

rails generate model Product name:string subcategory:references 

としてProductモデル渡すサブカテゴリを作成します。あなたはあなた自身のモデルに関係を書く必要があります(つまり、has_many部分のみ)

間違って実行したことがない場合は、rails generateコマンドで新しいマイグレーションを作成するか、手動で作成することができます。

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

これにより、適切な移行ファイルが作成され、rake db:migrateが実行されます。 :)

+0

こんにちはクマール、私は移行としてこれを書いていくつもりですか? (レールは移行AddReferenceToProductsを生成する)し、他の答えを追加? – Jonathan

+1

'rails generate migration AddSubcategoryRefToProducts subcategory:references'適切な移行が作成されるはずです。 – 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

ごめんなさい。あなたはマイグレーションファイルを手に入れて、サブカテゴリのために手動で 'add_column:products、:category_id、:integer'を手動で行うことができます。 –

関連する問題