Проблемы с ассоциацией `Polymorphi c ассоциация не поддерживает вычисление класса` в polymorphi c assign_to со sti - PullRequest
0 голосов
/ 28 марта 2020

Я сталкиваюсь с проблемой создания отношений, когда пытаюсь создать новый экземпляр объекта, я получаю ошибку Polymorphic association does not support to compute class.. Я получаю эту ошибку однозначно на переднем конце, кажется, что все работает нормально в консоли.

Вот классы:

визуализация> base.rb

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

визуализация> 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

Отношения, кажется, работают, как я могу следующие запросы:

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

Любая идея, почему она может работать на консоли но не в переднем конце?

Любая помощь будет оценена.

Ps: я уже читал эти два поста, 1 , 2, но я не сделал не может прийти к какому-либо решению. Также попробовал этот драгоценный камень , но у меня не получилось.

1 Ответ

0 голосов
/ 28 марта 2020

Я сделал те же ассоциации, что и вы, и это хорошо работает как в консоли, так и в представлении. Я делюсь своими настройками, может быть, вы можете ссылаться.

# 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>

, затем запустите в консоли:

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

, затем go до http://localhost: 3000 , вы можете найти

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