在Ruby on Rails中重构模型方法

时间:2009-04-02 22:11:36

标签: ruby-on-rails ruby refactoring methods

我的阵营在铁轨中使用的常用习语如下:

def right_things(all_things, value)
    things = []
    for thing in all_things
       things << thing if thing.attribute == value
    end
    return things
end

我怎样才能让这更好/更快/更强?

THX

-C

2 个答案:

答案 0 :(得分:13)

def right_things(all_things, value)
    all_things.select{|x| x.attribute == value}
end

答案 1 :(得分:1)

如果你的东西是ActiveRecord模型,你只需要为当前目的选择的项目,如果你使用Rails 2.0(?绝对是2.1)或更高版本,你可以找到named_scope有用。

class Thing
  named_scope :rightness, lambda { |value| :conditions => ['attribute = ?', value] }
end

所以你可以说

Thing.rightness(123)

,(在这种情况下)类似于

Thing.find_by_attribute(123)

因为它归结为一个SQL查询,但它更容易链接来修改SQL。如果这对你有用,当然可能不是......