Рельсы: сложное условие поиска - PullRequest
0 голосов
/ 21 марта 2011

Допустим, у нас есть такие модели:

Trigger принадлежат: позиция

Позиция has_many: триггер

Позиция имеет несколько полей, включая: posx,: poxy и, возможно, несколько других полей, которые мы хотели бы отфильтровать по ...

По существу. В triggers_controller я хотел бы найти все триггеры, которые попадают в некоторый диапазон posx и posy.

Я сделал это в одном запросе в cakephp, так что я знаю, что это возможно, но я не знаю, как структурировать это в рельсах. Кроме того, я не знаю, как делать «и» и «или» и т. Д. *

Спасибо!

1 Ответ

2 голосов
/ 21 марта 2011

Я хотел бы создать область для обработки такого типа потенциально общего поиска:

class Trigger < ActiveRecord::Base

  belongs_to :position

  # if you're in rails 2
  named_scope :within, lambda{|tlx, tly, brx, bry| {:joins => :position, conditions => ['`positions`.posx >= ? AND `positions`.posy >= ? AND `positions`.posx <= ? AND `positions`.posy <= ?', tlx, tly, brx, bry]} }

  # if you're in rails 3
  scope :within, lamba{|tlx,tly,brx,bry| joins(:position).where('`positions`.posx >= ? AND `positions`.posy >= ? AND `positions`.posx <= ? AND `positions`.posy <= ?', tlx, tly, brx, bry) }
end

Тогда в вашем контроллере вы просто сделаете:

Trigger.within(top_left_x, top_left_y, bottom_right_x, bottom_right_y)
...