这是我的代码:
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)
得到零。在使用这样的pry调试此provider
之后:
provider.class.name
=> "User"
我已将providers
变量定义为Provider
而非User
providers = Provider.order("#{sort_column} #{sort_direction}")
我无法获得"Provider"
课程。当然,carrierwave将使用用户上传目录而不是提供商上传目录来搜索文件。我怎么得到这个?提前致谢
我的STI课程:
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
答案 0 :(得分:0)
如果您在表格中没有type
列的情况下使用STI,则会发生这种情况。从数据库加载记录时,ActiveRecord正在使用该列中的信息来确定用于实例化对象的类。
要修复,您需要添加缺少的列,并为表示子类的每条记录填充Provider
。