Skip to content

Instantly share code, notes, and snippets.

@joonyou
Last active July 19, 2018 13:41
Show Gist options
  • Save joonyou/1b2111af84aee9cb2462d9eb94835f20 to your computer and use it in GitHub Desktop.
Save joonyou/1b2111af84aee9cb2462d9eb94835f20 to your computer and use it in GitHub Desktop.
ActiveRecord Polymorphic
%w(rspec active_record sqlite3 pry-byebug).each {|gem| require gem }
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => ':memory:' )
class CreateTestDB < ActiveRecord::Migration[5.2]
def self.up
create_table :foos do |t|
t.string :name
t.timestamps
end
create_table :bars do |t|
t.string :name
t.timestamps
end
create_table :comments do |t|
t.references :commentable, polymorphic: true
t.string :blah
t.timestamps
end
end
end
CreateTestDB.migrate(:up)
class Foo < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Bar < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
RSpec.describe Foo do
let(:foo) { Foo.create! name: "foo" }
let(:bar) { Bar.create! name: "bar" }
before do
foo.comments.create blah: "foo blah blah"
bar.comments.create blah: "bar blah blah"
end
it "has a comment separate from Bar" do
expect(foo.comments.first.blah)
.to eq "foo blah blah"
expect(bar.comments.first.blah)
.to eq "bar blah blah"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment