怖話でcomment付ける対象なんて"怖い話"だけに決まってるじゃん!
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.text :body
t.references :story
t.timestamps
end
end
end
余裕過ぎワロタwww
1年後・・・
"怖い漫画"・・・だと・・・!?
\( ^o^)/ オワタ
じゃ、じゃあ、comic_commentsというテーブルを・・・(レガシー直行)
commentをcommentableにする
でも大丈夫、後からでもcommentableに移行できます。今回はacts_as_commentableを使いました。
# Gemfile:
gem 'acts_as_commentable', '2.0.1'
% rails g comment
modelとmigrationでファイルを上書きしそうになるけど上書きしない。
# app/models/comment.rb:
class Comment < ActiveRecord::Base
include ActsAsCommentable::Comment
belongs_to :commentable, polymorphic: true, counter_cache: true
end
# app/models/story.rb:
class Story < ActiveRecord::Base
has_many :comments, as: :commentable, dependent: :destroy
acts_as_commentable
attr_readonly :comments_count
end
# app/models/comic.rb:
class Comic < ActiveRecord::Base
has_many :comments, as: :commentable, dependent: :destroy
acts_as_commentable
attr_readonly :comments_count
end
polymorphicかつcounter_cache使う時は、相手先をreadonlyにしとく必要があるみたいです。
class AddCommentableToComment < ActiveRecord::Migration
def up
rename_column :comments, :story_id, :commentable_id
add_column :comments, :commentable_type, :string, default: 'Story'
add_index :comments, :commentable_id
add_index :comments, :commentable_type
end
def down
rename_column :comments, :commentable_id, :story_id
remove_column :comments, :commentable_type
end
end
これで既にコメントが沢山あってもcommentableへの移行がバッチリ。この調子でtag, category, voteもどんどんやっていこう!