让我们说我们有这样的模型:
触发 belongs_to:position
位置 has_many:触发器
位置有几个字段,包括:posx,:poxy,以及我们想要过滤的其他几个字段......
本质。在triggers_controller中,我想找到属于posx和posy范围内的所有触发器。
我在cakephp的一个查询中完成了这个,所以我知道它应该是可能的,但我不知道如何在rails中构建它。此外,我不知道如何做“和”和“或”等...
谢谢!
答案 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)