搜索红宝石与来自法

问题描述:

我试图整理一组对象S的,其中S级有一个名为some_method一个实例方法在S的模型中定义一个返回值,V值返回轨道。搜索红宝石与来自法

def some_method(id) 
    ... 
    return something # a float number 
end 

S类与具有many_to_many关系的C类有关。 (C类has_many s和S类has_many c)。我通过调用C.find(C_ID)得到这个集合S的对象.S

我想这样

C.find(c_id).s.sort{|a,b| a.some_method(id) <=> b.some_method(id)} 

的东西,但我不能数组排序。我该如何做到这一点?

+0

如果您重命名方法'method',它会工作吗?我认为你可能会重写内置的'method'方法,这可能会产生意想不到的副作用:http://ruby-doc.org/core-2.2.3/Object.html#method-i-method – Unixmonkey

+0

它不叫“方法”,对不起混淆 – leoluo

+0

你真的是一种方法吗?或一个普通的实例方法? – Meier

您正在使用<=>运算符,但似乎正在返回浮点数。这不是该运营商需要有效排序的问题。 (Read more about that operator here

我建议你使用sort_by

C.find(c_id).s.sort_by{ |element| element.some_method(id) } 

这将在方法some_method数组s排序,假设你有你在传递一个id。根据什么id是,您可能需要在此区块外定义它。

+0

这不起作用...更具体地说,S类与C类有许多关系。我通过调用C.find(c_id).s(class C has_many s和class S有很多c)来获得这个ArrayOfS。这会不一样吗? – leoluo

+0

你能否在原始问题中粘贴你的S和C类,我会更新我的答案以帮助? – yez

+0

我刚刚做过。请再次检查thx – leoluo