1

タイトルに意味があるといいのですが、もう少し詳しく説明します。ユーザーがレシピをアップロードできるシンプルなアプリがあります。次に、それらをすべて表示するか、show アクションを介して各レシピを個別に表示できます

def show
@recipe = Recipe.find(params[:id])
end

ビューでは、そのレシピのさまざまな属性を次のように表示します

  <b><%= @recipe.dish_name %></b><br>
  <b><%= image_tag @recipe.avatar.url(:showrecipe) %><b><br>
  <b>by&nbsp;<%= @recipe.user.name %></b></br></br>
  <b>Description</b></br>
  <b><%= @recipe.description %></b></br>
  <b>Ingredients</b></br>
  <b><%= raw(ingredient_names_list(@recipe.ingredients)) %></b>
  <br>
  <b>Preperation Steps</b></br>
  <ol>
  <li><%= raw(preperation_steps_list(@recipe.preperations)) %></li>
  </ol>

私が達成したいのは、dish_name に基づいて、表示されているレシピに似ている他のレシピの名前をリストするセクションを同じページに持つことです。

このようなことをするのはこれが初めてなので、どのリソースを見るべきか、またはこれについてどのように行うかについての指針を探しています

これまでの私の考えは、

1) 表示されている料理名に基づいてスコープを呼び出すメソッドを作成し、料理名のパラメーターを渡します。

それは間違っているかもしれません。正しい方向へのナッジを探してください

編集

show アクションでもこれを試しましたが、引数の数が間違っています (0 に対して 1)。

@relatedrecipe = Recipe.where(@recipe.dish_name('LIKE'),(params[:dish_name]))

ありがとう

4

1 に答える 1

2

sunspot_solrこれを行う場合、アプリをwithなどの全文検索データベースにプラグインしsunspot_rails、タイトル、説明、および成分のリストにインデックスを付けます。

次に、タイトルと成分の正規化されたバージョンを使用して、既に見ているレコードを除外して一般的な検索を作成し、ニアヒットと関連コンテンツを見つけます。

sunspot_rails(私が経験したことのあるもの)を使用して、より具体的な例を編集します。

sunspot_rails は、モデル内の検索可能なブロックを使用して、作成/更新/破棄時にインデックスを作成する必要があることを伝えます。以下に示すように、:ingredient_names を使用してカスタム インデックスを作成できます。

class Recipe < ActiveRecord::Base

  searchable do
    integer :id
    string  :description
    text    :preparations
    text    :ingredient_names
  end

  def ingredient_names
    ingredients.map{|i| i.name }.uniq.compact.join(' ')
  end

  def similar_recipes
    search = Recipe.search do
      without(:id, self.id) # don't return the same record
      fulltext(self.description) do
        boost_fields(:description => 2) # give extra weight to description matches
      end
      fulltext(self.ingredient_names)
    end
    search.results
  end

end
于 2012-12-03T19:45:21.040 に答える