Ich habe das folgende ModellWie benutze ich find_by_sql richtig?
class Backup < ActiveRecord::Base
belongs_to :component
belongs_to :backup_medium
def self.search(value)
join_tables = "backups, components, backup_media"
joins = "backups.backup_medium_id = backup_media.id and components.id = backups.component_id"
c = Backup.find_by_sql "select * from #{join_tables} where components.name like '%#{value}%' and #{joins}"
b = Backup.find_by_sql "select * from #{join_tables} where backup_media.name like '%#{value}%' and #{joins}"
c.count > 0 ? c : b
end
end
In hebeln, wenn ich Backup.all.class laufen, bekomme ich
=> Backup::ActiveRecord_Relation
aber wenn ich Backup.search ('xxx'). Klasse laufen, ich bekomme
=> Array
Da die Suche eine Teilmenge aller zurückgeben sollte, ich glaube, ich brauche eine Active Record_Relation zurückzukehren. Was vermisse ich?
Sie sollten versuchen, das ActiveRecord-Abfrage-Interface zu verwenden, anstatt sich auf 'find_by_sql' zu verlassen, also hätten Sie etwas wie' Backup.joins (: Komponenten,: backup_media) .where ("components.name like '% # { Wert}% ') 'für die erste Abfrage, die eine' Backup :: ActiveRecord_Relation' zurückgeben soll. 'find_by_sql' ist für komplexere Abfragen gedacht als das. –
Mögliches Duplikat von [find \ _by \ _sql rendert ein Array] (http://stackoverflow.com/questions/11115785/find-by-sql-renders-an-array) –