RAILS:复杂查找条件

时间:2011-03-21 01:05:46

标签: ruby-on-rails triggers find

让我们说我们有这样的模型:

触发 belongs_to:position

位置 has_many:触发器

位置有几个字段,包括:posx,:poxy,以及我们想要过滤的其他几个字段......

本质。在triggers_controller中,我想找到属于posx和posy范围内的所有触发器。

我在cakephp的一个查询中完成了这个,所以我知道它应该是可能的,但我不知道如何在rails中构建它。此外,我不知道如何做“和”和“或”等...

谢谢!

1 个答案:

答案 0 :(得分:2)

我会创建一个范围来处理这种潜在的常见查找:

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)