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
这是我的代码:
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