-
Notifications
You must be signed in to change notification settings - Fork 41
Description
Using tableless to create a model that searchs and union other models.
My tableless model works, but it keeps giving this message:
ActiveRecord::JDBCError: Table 'xxxxxx' doesn't exist: SHOW FIELDS FROM
I'm clueless!
My setup:
Gemfile:
gem 'rails', '3.2.8'
gem 'activerecord-jdbcmysql-adapter'
gem 'jruby-openssl'
group :assets do
gem 'sass-rails', '> 3.2.3'> 3.2.1'
gem 'coffee-rails', '
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'i18n', '>= 0.6.1'
gem 'brdinheiro', '>=3.3.0'
gem 'brcpfcnpj', '>=3.3.0'
gem 'composite_primary_keys'
gem 'trinidad'
gem 'authlogic'
gem 'adauth'
gem 'delayed_job_active_record'
gem 'will_paginate'
gem "activerecord-tableless", "~> 1.0.1"
Model
class Vinc_mov_mix < ActiveRecord::Base
has_no_table
column :estab_id, :integer
column :vinc_id, :integer
column :caged_id, :integer
column :nome, :varchar
column :pis, :varchar
has_one :vinculo, :primary_key => :vinc_id, :foreign_key => :CN_NUMERO_SEQ
has_one :estab, :primary_key => :estab_id, :foreign_key => :CN_NUMERO_SEQ
has_one :caged_trab,:primary_key => :caged_id, :foreign_key => :id:
VINC_TABLE = '' + Vinculo.table_name + ''
CAGED_TABLE = '' + CagedTrab.table_name + ''
ESTAB_TABLE = '' + Estab.table_name + ''
PAGE_SIZE = 50
def self.search(estabs_ids, criterios={}, page=0) #page=offset
estabs_ids = estabs_ids.to_a
page -= 1; page = 0 if page < 0
clauses = where_clauses(criterios)
if estabs_ids.present?
clauses[:vincs_clauses] = ["#{ESTAB_TABLE}.cn_numero_seq IN (#{estabs_ids.join(',')})"] + clauses[:vincs_clauses]
clauses[:cageds_clauses] = ["#{ESTAB_TABLE}.cn_numero_seq IN (#{estabs_ids.join(',')})"] + clauses[:cageds_clauses]
end
self.find_by_sql(
"SELECT #{ESTAB_TABLE}.cn_numero_seq as estab_id, #{VINC_TABLE}.cn_numero_seq as vinc_id, null as caged_id, #{VINC_TABLE}.no_partic_rais as nome, #{VINC_TABLE}.co_pis as pis
from #{ESTAB_TABLE}
join #{VINC_TABLE} on #{ESTAB_TABLE}.co_cnpj_cei = #{VINC_TABLE}.co_cnpj_cei
where #{clauses[:vincs_clauses].join(' AND ')}
UNION ALL
SELECT #{ESTAB_TABLE}.cn_numero_seq as estab_id, null as vinc_id, #{CAGED_TABLE}.id as caged_id, #{CAGED_TABLE}.nomeTrab as nome, #{CAGED_TABLE}.pis as pis
from #{ESTAB_TABLE}
join #{CAGED_TABLE} ON #{ESTAB_TABLE}.co_cnpj_cei = #{CAGED_TABLE}.identificadorEstab
where #{clauses[:cageds_clauses].join(' AND ')}
order by nome
limit #{page * PAGE_SIZE}, #{PAGE_SIZE}" #limit <offset> <count>
)
end