首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails 3精细化搜索

rails 3精细化搜索
EN

Stack Overflow用户
提问于 2012-03-06 23:55:28
回答 2查看 345关注 0票数 0

我有一个rails应用程序。主页搜索电影数据库,并在搜索查询的结果页面中显示结果。

现在,在结果页面中有一个电影列表(比如5个),并且结果页面在左侧栏中显示电影的属性。

例如,

=================Movies结果page================

左边栏

流派

喜剧(Link_to)恐怖(Link_to)

语言

英语(Link_to)德语(Link_to)

结果集

1愤怒管理2美国派3邪恶死亡4记恨5 Du riescht so gut

=====================================================

现在,在第一次搜索之后,我的搜索控制器有一个@movieid数组,其中包含5个movieid(如上所述)。左边的栏有过滤器,可以进一步过滤。我使用@movieid数组列出了结果集中的电影。

如果我点击"comedy“链接,我希望结果页面只显示"1.愤怒管理”和"2.美国派“。

如果我点击“德语”链接。它应该只显示“5.du riescht so gut”。就是这样。

现在,我对以下选项感到困惑: 1.我在考虑通过link_to传递genre_id和@movieid数组作为参数。2.使用cookie:store保存@movieid数组3.将@movieid保存到数据库中并检索。

我不知道怎么处理这件事。记住,我的@movieid数组也可以包含100000个ids。

在最佳实践和性能方面帮助我。

谢谢!

编辑:

我可以使用Mysql视图来存储结果集吗?问题是,如果100000个用户同时进行搜索,会创建许多视图,这会发生什么情况?什么是好的实践?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 03:25:56

我认为,我做得很好!

回答我的问题:

  1. 在第一个主搜索页面上,如果我在MOVIES表上运行搜索查询,并从表中的5000部电影中获得300条记录,那么我将从rails方法AR::Base.connection.execute()中动态地在mysql数据库中创建一个视图,它保存着300部搜索到的电影的movie_ids。
  2. 现在继续,在第二页中,如果用户根据语言或流派过滤300个结果,我将缩小搜索范围,再次在创建的视图上进行搜索,而不是在movies表上进行搜索。这是通过在传递给link_to助手后从url获取language_id和genre_id来完成的。
  3. 我从每个浏览器获取一个session_id,并在该id前面附加一个字母表,将其用作我的视图名称。
  4. 如果用户访问主页或通过搜索页面找到确切的产品,我将丢弃视图,并保持超时以丢弃视图(例如1小时),并且每天都会丢弃前一天创建的视图。

我从Ryan那里听说持久化用户搜索是一个很好的实践。我对此也很感兴趣。现在我想我已经实现了它。请用我的方法中的所有缺点来打击我,我正试图在这里经营一家公司。

谢谢!

编辑:

忘记了我对阿志高的感谢。当然,我已经添加了will_paginate gem。它工作正常。

提示:在will_paginate中,如果您使用:per_page => 10列出83部电影,那么您将无法在9页的第一页(10+10+....+3)中显示电影的总数。如果你想像电影(83)那样做的话。然后,@movies.total_entries.to_s帮了大忙。

也要感谢你!

票数 1
EN

Stack Overflow用户

发布于 2012-03-07 00:59:58

因为你可以有100000个不同的电影,你需要在你的rails应用中实现分页。有了will_paginate gem,这就变得很容易了。下面是一个例子:

代码语言:javascript
复制
# movies_controller.rb
def index
  @movies = Movie.search(params[:q]).order('name').paginate(:page => params[:page], :per_page => 15)

  respond_to do |format|
    format.html
  end
end

然后在您的视图中:

代码语言:javascript
复制
# index.html.erb
<%= form_tag movies_path, :method => 'get' do %>
  <div>
    <%= text_field_tag :q, params[:q] %>
    <%= submit_tag "Search", :name => nil %>
  </div>
<% end %>
<table>
  <tr>
    <th>Movies</th>
  </tr>
  <% @movies.each do |movie| %>
    <tr>
      <td><%= link_to movie.name, movie %></td>
    </tr>
  <% end %>
</table>
<%= will_paginate @movies %>

搜索和过滤肯定是一个棘手的问题。这真的很难详细解释如此复杂的事情,所以我将简单地指出令人难以置信的Railscast,它解释了如何做你想做的事情。

http://railscasts.com/episodes/240-search-sort-paginate-with-ajax

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9587186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档