我有一些似乎无法解决的复杂搜索查询。我有三张桌子。
项目,地区,类型
模式
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 %>
我希望能够搜索匹配“项目”中的“名称”,然后根据地区,类型和年份输出平均价格。我似乎遇到的一个问题是搜索只识别“选择项目2”选项,而不是两者。
Result View
<h2>Item Results</h2>
We found <%= @count %> items that matched your options, spanning <%= @years %> years and <%= @regions %> regions
<table class="table">
<th></th>
<th><%= @item_one %></th>
<th><%= @item_two %></th>
<th>Difference</th>
<tr>
<td>Price</td>
<% @comparison.each do |v| %>
<td><%= v.price1 %></td>
<td><%= v.price2 %></td>
<td><%= v.price1 - v.price2 %></td>
</tr>
</table>
<% end %>
控制器
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
答案 0 :(得分:0)
“我希望能够搜索匹配'项目'中的'名称' 根据地区,类型和年份输出平均价格“。
也许这种关系应该是这样的。
本期特价货品&GT;属于区域
本期特价货品&GT;属于Type(s)
然后,如果想要搜索项目,只使用一个查询给出名称和年份。
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])
提示*
Ruby on Rails遵循语言约定,因此最好将“类型”表重命名为“类型”
因为model表示单个实体,而数据库表由许多实体组成。