我应该使用什么关联才能按 Rails 应用程序中的关联模型对搜索结果进行排序?

发布于 2024-07-26 11:40:05 字数 358 浏览 4 评论 0原文

我目前正在编写一个应用程序,它可以从 Twitter 中提取所有带有链接的推文,并将它们放入我们的可搜索数据库中。

我们的数据库表如下所示:

Tweets
  content
  tweet_id

Links
  url
  title
  count

User
  username
  user_image

我们希望能够在 tweet.content 列中搜索搜索词,并按 link.count 对结果进行排序

设置模型关联来实现此目的的最佳方法是什么? 执行搜索的最佳方式是什么? 我已经研究过acts_as_ferret,但我不知道如何对结果进行排序。

谢谢, 丹尼尔·埃里克森

I'm currently writing an app that pulls all the tweets from twitter with links in them and puts them into our searchable database.

Our database tables look like this:

Tweets
  content
  tweet_id

Links
  url
  title
  count

User
  username
  user_image

We'd like to be able to search through the tweet.content column for a search term and have the results ordered by the link.count

What is the best way to set up the model associations to accomplish this? And what is the best way to perform the search? I've looked into acts_as_ferret, but I don't know how I would sort the results.

Thanks,
Daniel Erickson

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月野兔 2024-08-02 11:40:05

也许像这样的东西

class Tweets < ActiveRecord::Base
  named_scope :order_by_number_of_links,
    :joins => "LEFT OUTER JOIN links ON(tweets.id = links.tweet_id)"
    :group => "tweets.id"
    :order => "count(links.id) DESC"
end

这还没有经过测试,但希望你现在可以做

Tweets.all(
  :conditions => ["content LIKE ?", params[:query]]
).order_by_number_of_links

一个可能更好(更快)的方法是实现一个counter_cache。 Rails 允许您在 tweets 表中进行计数,该计数反映了它拥有多少个 X 类型的关联对象。 因此,您将 links_count 添加到您的 tweets 表中,Rails 应该使该计数器保持最新状态,以了解该 tweet 有多少个链接。 这将使查询变得更容易、更快。 请查看 Railcast 了解更多信息。

Maybe something like this

class Tweets < ActiveRecord::Base
  named_scope :order_by_number_of_links,
    :joins => "LEFT OUTER JOIN links ON(tweets.id = links.tweet_id)"
    :group => "tweets.id"
    :order => "count(links.id) DESC"
end

This has not been tested, but hopefully you can now do

Tweets.all(
  :conditions => ["content LIKE ?", params[:query]]
).order_by_number_of_links

A quite possible better (faster) way of doing this is to implement a counter_cache. Rails allows you to have a count in the tweets-table which reflects how many associated objects of type X it has. So, you you add a links_count to your tweets-table Rails should keep that counter up to date on how many links that tweet has. This will make the query easier and faster. Take a look at this Railcast for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文