希望标题有一些意义,但我会详细介绍。我有一个简单的应用程序,允许用户上传食谱。然后,您可以通过show action
单独查看它们或单独查看每个配方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 <%= @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)创建一个方法,根据正在显示的dish_name调用范围,传递dish_name的参数。
这可能是错的,只是想朝正确的方向寻求推动
修改
我也在我的节目动作中尝试了这个但是我得到错误的参数数量(1代表0)
@relatedrecipe = Recipe.where(@recipe.dish_name('LIKE'),(params[:dish_name]))
由于
答案 0 :(得分:2)
如果我这样做,我会将我的应用程序插入一个全文搜索数据库,例如sunspot_solr
和sunspot_rails
,并索引标题,描述和成分列表。
然后使用标准化版本的标题和成分创建一个通用搜索,排除您正在查看的记录,以提出近乎命中和相关内容。
修改以获取使用sunspot_rails
的更具体的示例(我有一些经验):
sunspot_rails在模型中使用可搜索的块来告诉它应该在create / update / destroy上索引什么。 您可以创建自定义索引,如下面显示的: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