jbox-web / ajax-datatables-rails

A wrapper around DataTable's ajax methods that allow synchronization with server-side pagination in a Rails app
MIT License
585 stars 228 forks source link

Sorting Based on one Column for Many Many Relationships #353

Open vgupta1809 opened 4 years ago

vgupta1809 commented 4 years ago

Hi, I am facing in writing the joins or includes complex queries for this gem.

Models:- class Contact < ApplicationRecord has_many :contact_contact_categories has_many :contact_categories, through: :contact_contact_categories end

class ContactCategory < ApplicationRecord has_many :contact_contact_categories, dependent: :destroy has_many :contacts, through: :contact_contact_categories end

This is my contact_datatable.rb class ContactDatatable < AjaxDatatablesRails::ActiveRecord

extend Forwardable

def_delegators :@view, :link_to, :edit_contact_path

def initialize(params, opts = {}) @view = opts[:view_context] super end

def view_columns @view_columns ||= { name: { source: "Contact.decorate.name" }, organization_name: { source: "Contact.decorate.organization_name" }, contact_categories: { source: "Contact.decorate.contact_categories" }, phone: { source: "Contact.decorate.phone" }, email: { source: "Contact.decorate.email" }, dt_actions: { source: "Contact.decorate.dt_actions", searchable: false, orderable: false }, } end

def data records.map do |record| decorated_record = record.decorate { name: decorated_record.name, organization_name: decorated_record.organization_name, contact_categories: decorated_record.contact_categories, phone: decorated_record.phone, email: decorated_record.email, dt_actions: decorated_record.dt_actions, DT_RowId: record.id, } end end

def get_raw_records params[:contacts].joins(:contact_contact_categories) end

end

contact_decorator.rb

class ContactDecorator < Draper::Decorator include Draper::LazyHelpers delegate_all

def dt_actions "