Ruby on rails rails搜索多个表

Ruby on rails rails搜索多个表,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有一个复杂的搜索查询,我似乎无法解决。我有三张桌子 项目、地区、类型 模式 create_table "Items" t.integer "item_id" t.string "name", t.datetime "created_at", t.datetime "updated_at", t.integer "year", t.float "price", create_table "Regions" t.integer "region_id" t.floa

我有一个复杂的搜索查询,我似乎无法解决。我有三张桌子

项目、地区、类型

模式

create_table "Items"
 t.integer  "item_id"
 t.string   "name",
 t.datetime "created_at",
 t.datetime "updated_at",
 t.integer  "year",
 t.float    "price",

create_table "Regions"
 t.integer  "region_id"
 t.float    "name",

create_table "Type"
 t.integer  "item_id"
 t.float    "name",
 t.integer  "item_number"
我正在考虑基于上述方案创建一个搜索函数来输出结果,然后比较两种商品的价格

查看

<%= form_tag vpc_search_path do |f| %>

<h5>Select Item One</h5>
<%= select_tag :item_one, options_from_collection_for_select(@item, "item_id", "name"), include_blank: false %>

<h5>Select Item Two</h5>
<%= select_tag "variety_two", options_from_collection_for_select(@item, "item_id", "name"), include_blank: false %>

<% @type.each do |i| %>
<div class="checkbox inline"><%= check_box_tag :type, i.name, {:checked => true} %>
</div>
<% end %>

<% @years.each do |y| %>
<%= check_box_tag :year, y.year %> <%= y.year %></br>
<% end %>

<% @regions.each do |r| %>
<%= check_box_tag :regions, r.region_id, {:checked => true} %> <%= r.name %></br>
<% end %>

<%= submit_tag "Compare" %>
<% end %>
“我希望能够在“项目”中搜索匹配的“名称” 输出基于区域、类型和年份的平均价格”

也许这种关系应该是这样的。

项目->属于区域
项目->属于类型

然后,如果要搜索项目,只需使用一个查询即可获得名称和年份

Item.select("i.name").from("Items i, Regions r, Types t").
where("i.region_id = r.region_id").
where("i.type_id = t.type_id").
where("i.name=?", params[:name]).
where("i.year=?", params[:year])
提示*
RubyonRails遵循语言惯例,因此最好将“Type”表重命名为“Types” as模型表示单个实体,而数据库表由多个实体组成

def index
    all = Items.select(:item_id)
    @item = Item.where(:item_id => all).order('item_name DESC')
    @years = Item.select('DISTINCT year') 
    @regions = Region.all
    @type = Type.select('DISTINCT name').order('name ASC')
  end

  def search
   @comparison = Item.where(:item_id => params[:item_one], :item_id => params[:item_two], :year => params[:year])
   @count = @comparison.count
   @years = @comparison.count(params[:year])
   @item_one = Item.where('item_id = ?', params[:item_one]).group('name').select('name')
   @item_two = Item.where('item_id = ?', params[:item_two]).group('name').select('name')
  end
Item.select("i.name").from("Items i, Regions r, Types t").
where("i.region_id = r.region_id").
where("i.type_id = t.type_id").
where("i.name=?", params[:name]).
where("i.year=?", params[:year])