1

希望标题有意义,但我会详细介绍。我有一个简单的应用程序,允许用户上传食谱。然后,您可以通过显示操作查看全部或单独查看每个配方

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>

我想要实现的是在同一页面上有一个部分,该部分将列出其他食谱的名称,这些食谱与所显示的食谱相似,基于 disc_name

这是我第一次做这样的事情,所以我正在寻找一些关于要查看哪些资源或我将如何去做的指针

到目前为止,我的想法是

1) 创建一个方法,该方法根据显示的菜名调用作用域,并传递菜名的参数。

那可能是错误的,请在正确的方向上轻推

编辑

我也在我的表演动作中尝试过这个,但我得到错误的参数数量(1 代表 0)

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

谢谢

4

1 回答 1

2

如果我这样做,我会将我的应用程序插入全文搜索数据库,例如标题、描述和成分列表并为其编制索引sunspot_solrsunspot_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 回答