Я использую activestorage для хранения изображений, и в моем случае компания has_one company_logo. Я использую datatables в своем действии индекса для отображения списка компаний и хочу показать логотип компании в списке компаний datatables. Я использую ajax-datatables-rails gem для отображения содержимого datatables. Как отобразить логотип компании?
Я искал эту документацию, которая объясняет использование данных типа img для столбца изображения и обеспечивает обратный вызов, который возвращает изображение, но в моем случае данные отображаются в гем и предоставляются из файла данных.
Моя компания выглядит так:
$('#companyDatatable').DataTable({
"processing": true,
"serverSide": true,
"columnDefs": [
{ "orderable": false, "targets": [-1, -2, -3] }
],
"ajax": $('.navbar-nav').find('li:eq(2)').find('a').attr('href'),
"columns": [
{"data": "name"},
{"data": "cif"},
{"data": "address"},
{"data": "action"}
]
});
Индекс действия контроллера компании:
def index
# @company_search = Company.ransack(params[:q])
# @companies = params[:q].present? ? @company_search.result(distinct: true) : Company.all
@admin_user_companies = @admin_user.companies unless @admin_user.companies.nil?
respond_to do |format|
format.html
format.json { render json: CompanyDatatable.new(params, view_context: view_context) }
end
end
Файл company_datatable.rb:
class CompanyDatatable < AjaxDatatablesRails::ActiveRecord
extend Forwardable
def_delegator :@view, :link_to
def initialize(params, opts={})
@view = opts[:view_context]
@admin_user = AdminUser.find(params[:admin_user_id])
super
end
def view_columns
# Declare strings in this format: ModelName.column_name
# or in aliased_join_table.column_name format
@view_columns ||= {
# id: { source: "User.id", cond: :eq },
# name: { source: "User.name", cond: :like }
name: { source: "Company.name" },
cif: { source: "Company.cif" },
address: { source: "Company.address" },
}
end
def data
records.map do |record|
{
name: record.name,
cif: record.cif,
address: record.address,
action: "#{@admin_user.companies.include?(record) || @admin_user.role == 'superadmin' ?
(link_to('Manage', @view.edit_admin_user_company_path(@admin_user, record), remote: true) + link_to('Delete', @view.admin_user_company_delete_company_path(@admin_user, record), remote: true)) : ''}".html_safe,
DT_RowId: record.id
}
end
end
def get_raw_records
Company.all
end
end