Invalide unique de l'héritage de table type: Rails

J'obtiens cette erreur lorsque vous essayez de créer un nouveau Produit dans mon application Rails.

Invalide unique de l'héritage de table type: Film n'est pas une sous-classe de
Produit

Comment puis-je résoudre ce problème?

Invalide unique de l'héritage de table type: Rails

contrôleur

class ProductsController < ApplicationController
before_action :set_product, only: [:show, :edit, :update, :destroy]
# GET /products
# GET /products.json
def index
@products = Product.all
end
# GET /products/1
# GET /products/1.json
def show
end
# GET /products/new
def new
@product = Product.new
end
# GET /products/1/edit
def edit
end
# POST /products
# POST /products.json
def create
@product = Product.new(product_params)
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: 'Product was successfully created.' }
format.json { render action: 'show', status: :created, location: @product }
else
format.html { render action: 'new' }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /products/1
# PATCH/PUT /products/1.json
def update
respond_to do |format|
if @product.update(product_params)
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# DELETE /products/1
# DELETE /products/1.json
def destroy
@product.destroy
respond_to do |format|
format.html { redirect_to products_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_product
@product = Product.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def product_params
params.require(:product).permit(:title, :artist, :type, :release_date, :category, :publisher, :format, :description, :sale_price, :rental_price)
end
end

migration

class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :title
t.string :artist
t.string :type
t.date :release_date
t.string :category
t.string :publisher
t.string :format
t.text :description
t.decimal :sale_price
t.decimal :rental_price
t.timestamps
end
end
end
  • assurez-vous que vous avez de Film classe qui étend la classe de Produit
  • l'extension @Muntasim commentaire: vérifiez que vous avez dans vos modèles: class Product < ActiveRecord::Base et class Movie < Product
  • J'ai donc créer un nouveau Modèle + Contrôleur à chaque fois que je veux un nouveau type de Produit? @MrYoshiji
  • Si votre Movie classe n'a rien de spécial à faire à part la catégorisation alors vous ne devez pas utiliser les IST. Sinon, vous avez toutes les classes possibles définis et vous Type champ doit être de sélectionner la zone à la place de texte libre.
  • Non, vous pouvez simplement utiliser le contrôleur produits et l'utilisation d'un params[:type] pour traiter un certain type de Produit pour le modèle, oui, vous devrez créer un nouveau modèle pour chaque nouveau type de Produit. Vous voulez que je poste une réponse avec quelques exemples @AntarrByrd ?
  • S'il vous plaît.

InformationsquelleAutor Antarr Byrd | 2013-12-03