Hej,
Mam taki kod
[code=ruby] def self.list(page_id)
@page_ids = Fanpage.where(:uid => page_id).map(&:id).map(&:to_s).join(',')
#na podstawie page_id generujemy tablice
App.find(
:all,
:joins => [:app_detal],
:select => 'apps.app_type as app_type, app_detals.html as html, apps.id as id, apps.name as name, apps.active as active,app_detals.date_start as date_start, app_detals.date_see as date_see,app_detals.time_start as time_start',
:conditions => ["block = '0' and active = '1' and CONCAT(date_start,' ',time_start) <= '"+Time.now.strftime("%Y-%m-%d %H:%M")+"' and date_see >= '"+Time.now.strftime("%Y-%m-%d")+"' "]
)
end[/code]
@page ids może przyjąć wartość np “1” albo “1,5”
teraz chcę to wykorzystać w zapytaniu tak byc doszło do zapytania (page_id = ‘1’ OR page_id = ‘5’)
Jak to ugryźć ?
Masz tam kawałek nieciekawego kodu;)
Stare (i deprecated) API activerecorda mieszasz z nowym, niepotrzebnie formatujesz czas na piechotę i sklejasz warunek (unikaj).
Samą sytuację z OR zastąpiłbym sqlowym warunkiem val IN (…), poniżej kod, jakby to mogło wyglądać (nie sprawdzane).
Powycinałem Ci aliasy w selekcie, bo z tego fragmentu wygląda jakbyś ich nie potrzebował.
[code=ruby ]
def self.list(page_id)
@page_ids = Fanpage.where(:uid => page_id).pluck(:id) # tablica id
App.joins(:app_detal).
select(“apps.app_type, app_detals.html, apps.id, apps.name, apps.active,app_detals.date_start, app_detals.date_see, app_detals.time_start”).
where([“block = ? AND active = ? AND CONCAT(date_start, ’ ', time_start) <= ? AND date_see >= ? AND page_id IN (?)”,
0, 1, Time.now, Time.now, @page_ids]).
end[/code]
super sprawa z tymi ? jaka parametry. Dzięki!
ale mam w page_id IN (NULL)
Coś trzeba poprawić ale już sobie poradzę dzięki!!
EDIT już jest OK!