Как использовать гем ajax-datatables-rails для отображения изображения (activestorage) в таблицах данных? - PullRequest
0 голосов
/ 11 апреля 2019

Я использую 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...