1

我的应用程序包含一个饮料模型

class Drink < ActiveRecord::Base

  attr_accessible :name
  has_many :recipe_steps, :dependent => :destroy
  has_many :ingredients, through: :recipe_steps
end

成分模型

class Ingredient < ActiveRecord::Base
  attr_accessible :name

  has_many :recipe_steps
end

我将如何获得它,所以当用户搜索一种成分时,它会返回所有含有该成分的饮料?

附加信息:我目前正在使用 sunspot/solr 进行搜索。

4

2 回答 2

1

首先,在您的Ingredient模型中,您需要这一行:

has_many :drinks, through: :recipe_steps

定义has_many, through:关系。确保它RecipeStep也有这些行:

belongs_to :ingredient
belongs_to :drink

然后你可以做类似的事情DrinksController

def search
  term = params[:search]
  ingredient = Ingredient.where(:name => term)
  @drinks = Ingredient.find(ingredient).drinks
end

你的表格应该是这样的:

<%= form_for @drink, :url => { :action => "search" } do |f| %>
  <%= f.text_field :search %>
<% end %>

我不知道你所有的名字,但这应该能让你继续前进。

于 2013-02-19T04:59:33.430 回答
0

以下应该可以正常工作:

class Ingredient < ActiveRecord::Base
  ...
  has_many :recipe_steps
  has_many :drinks, through: :recipe_steps
end
于 2013-02-19T04:51:38.943 回答