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])