Rails “find_all_by” vs “.where”

前端 未结 2 1350
广开言路
广开言路 2020-12-05 17:53

I have the following code:

def maturities
  InfoItem.find_all_by_work_order(self.work_order).map(&:maturity)
end

I was thinking about c

相关标签:
2条回答
  • 2020-12-05 18:22

    My opinion is that using .where is a better approach.

    When you use attribute based finders, you are going to have to tunnel through a method missing call and eventually define a class method, via class_eval, that returns your result. This is extra processing that you may not need to do.

    Also, stringing together: find_by_this_and_this_and_this_and_this... can get ugly.

    See how rails accomplishes attribute based finders here

    Method missing from module DynamicMatchers on github:

    def method_missing(name, *arguments, &block)
      match = Method.match(self, name)
    
      if match && match.valid?
        match.define
        send(name, *arguments, &block)
      else
        super
      end
    end
    
    0 讨论(0)
  • 2020-12-05 18:37

    I think the main advantage is being able to add additional criteria to where, find_all_by is limited to the field of the dynamic selector. If you only have one condition you are searching by then I think it is a wash, but when you start adding 3 or 4, dynamic finders can be ugly. Hashes are nice to look at, and you could pass a hash of conditions as a parameter if needed. Dynamic finders are cool, but I think where scales in a cleaner way and is more readable.

    0 讨论(0)
提交回复
热议问题