1

検索入力の 2 つのパラメーターに基づく小さな検索方法を実行しました。私のコードは次のようなものです:

def self.search(search, page)
    result = where("dead = ? and sold = ?", false, false)
    if not search.nil? and not search.empty?
        # regex for 'number - any word'
        search = search.split(' ')[0] if not (/^\d+ - .+$/ =~ search).nil?
        if not search.integer?
            result = result.where("name like ?", "%#{search}%")
        else
            result = result.where("earring = ?", search.to_i)
        end
    end
    result.paginate(:page => page)
        .includes(:mother, :father, :animal_type, :race)
        .order(:earring)
end

ご覧のとおり、かなり醜いです。動作しますが、醜いです。

だから、私はそれをより良くする方法を見つけようとしています..しかし、方法がわかりません。

皆さんが私に方向性を教えてくれることを願っています。

前もって感謝します

4

1 に答える 1

2
#in your model
scope :dead_and_sold, where('dead = :q AND sold = :q', :q => false)


#your search method
def self.search(search, page)
     result = dead_and_sold
     unless search.nil? && search.empty?
         # regex for 'number - any word'
         search = search.split(' ').first unless (/^\d+ - .+$/ =~ search).nil?

         result = unless search.instance_of?(Fixnum)
            result.where("name like ?", "%#{search}%")
         else
            result.where("earring = ?", search.to_i)
         end
     end


    result.paginate(:page => page)
       .includes(:mother, :father, :animal_type, :race)
       .order(:earring)

end
于 2012-10-10T11:05:13.723 に答える