Skip to content

Instantly share code, notes, and snippets.

@heaven
Created September 11, 2016 16:26
Show Gist options
  • Save heaven/d6a9060274a5b1cd16870568459de745 to your computer and use it in GitHub Desktop.
Save heaven/d6a9060274a5b1cd16870568459de745 to your computer and use it in GitHub Desktop.
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
# Activate the gem you are reporting the issue against.
gem "activerecord", "5.0.0"
gem "sqlite3"
end
require "active_record"
require "minitest/autorun"
require "logger"
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :posts, force: true do |t|
end
create_table :assets, force: true do |t|
t.integer :kind
t.integer :assetable_id
t.string :assetable_type
t.string :data
end
end
class Post < ActiveRecord::Base
has_many :assets, -> { where(:kind => 1) }, :as => :assetable
end
class Asset < ActiveRecord::Base
belongs_to :assetable, :polymorphic => true
def data=(value)
super "Saving value \"#{value}\" " <<
"of kind \"#{self.kind}\" " <<
"for assetable id \"#{self.assetable_id}\" " <<
"and assetable type \"#{self.assetable_type}\""
end
end
class AssociationTest < Minitest::Test
def test_association_stuff
post = Post.create!
value = "Test Data"
post.assets.create(:data => value)
expected_data = "Saving value \"#{value}\" " <<
"of kind \"1\" " <<
"for assetable id \"#{post.id}\" " <<
"and assetable type \"#{post.class.name}\""
assert_equal expected_data, post.assets.first.data
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment