Association issues with `Polymorphic association does not support to compute class.` in polymorphic belongs_to with sti

I meet a relationship creation problem when I try to create a new instance of an object, I get the error Polymorphic association does not support to compute class.. I get this error uniquely on front-end, everything seems to work fine in console.

Here are classes:

vizualization > base.rb

module Vizualization class Base < ApplicationRecord belongs_to :vizualization_item, polymorphic: true end
end

vizualization > foo_viz.rb

module Vizualization class FooViz < Base end
end

Foo.rb

class Foo < ApplicationRecord has_one :vizualization, class_name: "Vizualization::FooViz", as: :vizualization_item, inverse_of: :vizualization_item
end

Relationship seems to work as I can do following requests:

  • ParticipativeDatavizualization::FooViz.last.datavizualization_item
  • FooViz.last.cfp.participative_datavizualization

Any idea why it could work on console but not in front-end ?

Any help would be appreciated.

Ps: I've already read these two posts, 1, 2, but I didn't reach any solution. Also tried this gem but i didn't get it working.

1

1 Answer

I did the same associations as you, and it works well in both console and view. I share my settings, maybe you can reference.

# 20200328045328_create_vizualization_bases.rb
class CreateVizualizationBases < ActiveRecord::Migration[5.2] def change create_table :vizualization_bases do |t| t.integer :vizualization_item_id t.string :vizualization_item_type t.string :type, index: true t.timestamps end add_index :vizualization_bases, [:vizualization_item_type, :vizualization_item_id], name: 'inde_on_bases_for_poly' end
end
# 20200328045650_create_foos.rb
class CreateFoos < ActiveRecord::Migration[5.2] def change create_table :foos do |t| t.timestamps end end
end
# app/models/vizualization.rb
module Vizualization def self.table_name_prefix 'vizualization_' end
end
# app/models/vizualization/base.rb
class Vizualization ::Base < ApplicationRecord belongs_to :vizualization_item, polymorphic: true
end
# app/models/vizualization/foo_viz.rb
class Vizualization::FooViz < Vizualization::Base
end
# config/routes.rb
Rails.application.routes.draw do root "application#hello"
end
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base def hello @foo = Foo.first @foo_viz = @foo.vizualization end
end
# app/views/application/hello.html.erb
<h2>I'm Foo and my <%= "Id: #{@foo.id}, Class: #{@foo.class}" %></h2>
<h2>I'm FooViz and my <%= "Id: #{@foo_viz.id}, Class: #{@foo_viz.class}" %></h2>

then run in console:

foo = Foo.create
Vizualization::FooViz.create(vizualization_item: foo)

then go to , you can find

I'm Foo and my Id: 1, Class: Foo
I'm FooViz and my Id: 1, Class: Vizualization::FooViz

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like