Rails STI 得到 parent class 而不是 child class

Rails STI getting parent class instead of child class

这是我的代码:

  def data
    providers.map do |provider|
      binding.pry
      [
        ERB::Util.h(provider.id),
        link_to(raw(image_tag provider.avatar_url(:small), class: 'img-responsive'), admin_provider_path(provider))provider.enabled))
      ]
    end
  end

  def providers
    @providers ||= fetch_providers
  end

  def fetch_providers
    providers = Provider.order("#{sort_column} #{sort_direction}")
    providers = providers.page(page).per_page(per_page)
    if params[:sSearch].present?
      providers = providers.where("email like :search", search: "%#{params[:sSearch]}%")
    end
    providers
  end

我的问题是,我总是从 provider.avatar_url(:small) 得到 nil。在我使用 pry 调试这个 provider 之后:

provider.class.name
=> "User"

我已将 providers 变量定义为取自 Provider 而不是 User

providers = Provider.order("#{sort_column} #{sort_direction}")

我无法获取 "Provider" class。当然,哪个 carrierwave 将使用 用户上传目录 而不是 提供商上传目录 搜索文件。我怎么得到这个?提前致谢

我的 STI class:

class Provider < User
  has_many :products
  after_create :assign_default_role
  mount_uploader :avatar, AvatarUploader

  def self.all
    User.with_role(:provider)
  end

  private

  def assign_default_role
    self.add_role "provider"
  end
end

如果您在 table 中没有 type 列而使用 STI,就会发生这种情况。从数据库加载记录时,ActiveRecord 使用该列中的信息来确定要用于实例化对象的 class。

要修复,您需要添加缺失的列并为每个代表子class.

的记录填充一个Provider