2016-03-22 12 views
0

私は、this guideに従うRailsでの単一テーブル継承に取り組んでいます。Ruby on Railsでの単一テーブル継承での集約

スーパークラス:記事
サブクラス:チュートリアル、プロジェクト、思考
それらのすべてが、だから私は」「のコメント」

が含まれているが、次のように私が働いているクラスがありますこれらの記事をすべて表示し、種類別にフィルタリングすることができます。しかし、私はサブクラスの新しいオブジェクトを作成することができません.Tutorialなどです。ここで

は、関連するコードの抜粋である:ここで

#articles_controller.rb 
class ArticlesController < ApplicationController 

def type 
    Article.types.include?(params[:type]) ? params[:type] : "Article" 
end 

def type_class 
    type.constantize 
end 

def index 
    puts "The type is: " + type 
    #@articles = Article.all 
    @articles = type_class.all 
    @type = type 
end 

def new 
    @article = type_class.new 
end 

def edit 
    @article = type_class.find(params[:id]) 
end 

def show 
    @article = type_class.find(params[:id]) 
end 



#show.html.erb 
<p> 
<strong>Title:</strong> 
<%= @article.title %> 
</p> 

<p> 
<strong>Text:</strong> 
<%= @article.text %> 
</p> 

<div id="comments"> 
<h2>Comments</h2> 
<%= render @article.comments %> 
</div> 

<h2>Add a comment:</h2> 
<%= render 'comments/form' %> 


<%= link_to 'Edit', edit_article_path(@article) %> 
<%= link_to 'Back', articles_path %> 

は、私の記事のモデルである:

class Article < ActiveRecord::Base 

has_many :comments, dependent: :destroy 
validates :title, presence: true, 
length: { minimum: 5 } 

scope :projects, -> { where(type: 'Project')} 
scope :thoughts, -> { where(type: 'Thought')} 
scope :tutorials, -> { where(type: 'Tutorial')} 

self.inheritance_column = :type 

def self.types 
    %w(Tutorial Project Thought) 
end 

end 

私はタイプチュートリアルの新しい記事のオブジェクトを作成することができるよしかし、関連をレンダリングするときコンソールには次のように表示されます。

Mysql2::Error: Unknown column 'comments.tutorial_id' in 'where clause': SELECT `comments`.* FROM `comments` WHERE `comments`.`tutorial_id` = 29 

なぜSQLクエリにが含まれているのか混乱していますplain idではなくです。それをどのように変更するかに関する提案?

答えて

1

typeがレールによって予約されている、kindまたはtype_ofに、その列の名前を変更してみてください、それがエラー

+0

ではないが、完全な答えを修正するかどうかを確認し、これは右のトラックに私を導きました。 – Abundance

関連する問題