2014-08-27 67 views
0

我有一堆对象正准备在控制器中进行查询。我将这些对象传递给要过滤的方法,因为同一个过滤器应用于同一控制器中的多个操作。Rails控制器:将过滤器应用于ActiveRecord集合

def some_action 
    foos = Foo.where(nil) 
    filter_foos(foos) 

    stuff 
end 

def some_other_action 
    foos = Foo.where(nil) 
    filter_foos(foos) 

    other_stuff 
end 

def filter_objects(objects) 
    objects = objects.where(:bar => "baz") 
end 

但是,调用filter_objects似乎并没有改变foos。而且,当我向some_action发起一个控制器请求时,它甚至不会显示在我的查询中。在我的过滤器方法中,将raise objects.length.inspect放在objects = objects.where的任一侧,表明objects的长度保持不变。

我想我对Ruby/Rails中的对象或查询的工作原理有一些基本的误解。有人能把我引向正确的方向吗?

回答

0

我不认为你可以改变传入filter_objects的对象,并影响外部作用域中的foos。我自己对此感到困惑。您可能想了解Ruby parameter handling

相反,这样做:

foos = filter_objects(foos) 

而且定义修改为:

def filter_objects(objects) 
    objects.where(:bar => "baz") 
end 
+0

这是下一个选项,设置等于方法的返回值的对象。它也可以工作;这是我得到的懒惰:) – Vardarac 2014-08-27 17:45:45

相关问题