【问题标题】:ActiveRecord Query - RailsActiveRecord 查询 - Rails
【发布时间】:2015-02-23 01:36:50
【问题描述】:

在我的 rails 应用程序中,我有一个 Book 模型和一个 User 模型。

我使用acts_as_votable gem 允许对书籍模型进行投票。

在我的一个观点中,我目前正在呈现当前用户尚未投票的所有书籍的列表,然后从该列表中随机抓取一本书:

@books = Book.where.not(id: current_user.find_voted_items.map(&:id))
@book = @books.sample

我现在使用acts-as-taggable-on gem 为用户和图书添加了类别。

一本书或一个用户最多可以选择 9 个预定义的类别(标签),作为 tag_list 的一部分。

tag_list = "math, science, history, design, art, film, music, philosophy, poetry"

图书和用户共享这 9 个类别/标签。

我正在尝试检索与当前用户在其设置下选择的内容共享任何相似标签的所有图书的列表,不包括用户已经投票的所有图书,并且不包括属于当前用户的所有图书用户 (book.user != current_user)。

最后,我试图从这个列表中随机选择一本。

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 activerecord acts-as-taggable-on


    【解决方案1】:

    类似下面的代码应该可以工作。不过感觉很hacky。

    Book.tagged_with(current_user.tags, any: true).
      where.not(user: current_user).
      where.not(id: current_user.find_voted_items.map(&:id)).
      sample
    

    如果你发现你在其他地方使用了这个查询的一部分,我建议将它们提取到类方法中。由于您需要将当前用户作为参数传递,请注意首选方式(根据 Rails 指南)是使用类方法而不是范围。

    【讨论】:

    • 非常感谢! :))))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多