すべての私のRecipe
レコードのいくつかの属性を使って検索するコードを書いています。コードはうまくいきますが、大丈夫かどうか、またはそれをより良く/より速くする方法については、いくつかの情報を入力したいと思います。Ruby on Rails - 複数の属性を持つレコードを検索する
私はname:string
とingredients:[array of integers]
(postgresデータベース)を含むさまざまな属性を持つレシピモデルを持っています。成分は別のモデルのIDですIngredient
。これは学習経験であり、私は宝石を使いたくない。
マイフォーム index.html.erb
<%= form_tag recipes_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= collection_select(:ingredients, :ingredient_ids, Ingredient.all, :id, :name, {:include_blank => false, include_hidden: false}, { :multiple => true }) -%>
<%= submit_tag "Search" %>
</p>
<% end %>
recipes_controller.rb
def index
@recipes = Recipe.search(params[:search], params[:ingredients])
end
recipe.rb
def self.search(search, ids)
array = []
if search && !search.empty?
meals = where('name ILIKE ?', "%#{search}%")
meals.each do |meal|
array.push(meal)
end
if ids && !ids.empty?
ingredients(array, ids)
else
return array
end
elsif ids && !ids.empty?
ingredients(all, ids)
else
all
end
end
def self.ingredients(meals, ids)
newarray = []
if ids
meals.each do |me|
a = me.ingredients
b = ids[:ingredient_ids].map(&:to_i)
if (b - a).empty?
newarray.push(me)
end
end
return newarray
else
return meals
end
end
私がいないとこれは現時点では正常に動作します多くのレコードを持っていますが、数百または数千のレコードがあると非常に高速になるとは思わない。改善のアドバイスはありますか?