у меня 3 модели:
* Техник
* Договор подряда
* WorkContractType
Я хочу написать помощника, который выполняет поисковый запрос к базе данных и возвращает все данные, даже если общий столбец между объединенной таблицей 2 равен нулю, помощник используется на другой стороне проекта и работает очень хорошо, когда я делаю поиск
вот пользовательская модель:
class User < ActiveRecord::Base {
:id => :uuid,
:email => :string,
:encrypted_password => :string,
:reset_password_token => :string,
:reset_password_sent_at => :datetime,
:remember_created_at => :datetime,
:sign_in_count => :integer,
:current_sign_in_at => :datetime,
:last_sign_in_at => :datetime,
:current_sign_in_ip => :string,
:last_sign_in_ip => :string,
:confirmation_token => :string,
:confirmed_at => :datetime,
:confirmation_sent_at => :datetime,
:unconfirmed_email => :string,
:authentication_token => :string,
:type => :string,
:company_id => :uuid,
:team_id => :uuid,
:weekly_schedule_id => :uuid,
:first_name => :string,
:last_name => :string,
:avatar => :string,
:username => :string,
:gender => :integer,
:invitation_sent_at => :datetime,
:birthday_on => :date,
:is_archived => :boolean,
:updated_by_id => :uuid,
:device_id => :string,
:import_keys => :hstore,
:created_at => :datetime,
:updated_at => :datetime,
:is_localized => :boolean,
:is_administrator => :boolean,
:store_id => :uuid,
:code => :string,
:current_session_token => :string
}
и вот модель WorkContractType:
class WorkContractType < ActiveRecord::Base {
:id => :uuid,
:name => :string,
:slug => :string,
:is_archived => :boolean,
:updated_by_id => :uuid,
:device_id => :string,
:created_at => :datetime,
:updated_at => :datetime
}
и последний WorkContract:
class WorkContract < ActiveRecord::Base {
:id => :uuid,
:user_id => :uuid,
:work_contract_type_id => :uuid,
:start_on => :date,
:end_on => :date,
:is_archived => :boolean,
:updated_by_id => :uuid,
:device_id => :string,
:import_keys => :hstore,
:created_at => :datetime,
:updated_at => :datetime,
:rubric_category_id => :uuid
}
Я вызываю свою вспомогательную функцию:
class TechnicianQueryHelper
def initialize( query = nil )
@query = Arel.sql("UNACCENT('%#{ query }%')")
end
def search
Technician.joins(:work_contract_types).where(
first_name.matches( @query )
.or( last_name.matches( @query ) )
.or( email.matches( @query ) )
.or( technician_code.matches( @query ) )
.or( work_contract_name.matches( @query ) )
)
end
при попытке найти техника, который не работает, и когда я удалил условие соединения, оно работает, но не в другом vue, я думаю, что есть проблема с условием соединения, и я подумал, что если я перезапишу запрос с левой присоединиться или что-то, что возвращает все данные, даже если ноль поможет!
обратите внимание, что:
Пользователь: has_many: work_contracts, -> {order 'start_on DESC'} и
has_many: work_contract_types, через:: work_contracts
WorkContract: Proper_to: пользователь и Proper_to: Work_contract_type