ruby-on-rails - RoR ActiveRecord 半人工智能应用程序加入帮助
问题描述
使用 RoR 应用程序。用一点基本的人工智能想想艺术的 Tinder。当您喜欢或不喜欢艺术时,该应用程序会根据其他用户的喜好向您展示您希望更喜欢的艺术。我正在编写代码以选择下一个要显示的图像。
我使用以下模型:
基本用户信息:
class User < ApplicationRecord
has_many :artworks
has_many :artists
has_many :art_views
end
每件的信息(价格、高度、宽度等)
class Artwork < ApplicationRecord
belongs_to :user
belongs_to :artist
has_many :art_views
end
表示向用户展示了哪些艺术品(布尔值表示用户是否喜欢艺术品)
class ArtView < ApplicationRecord
belongs_to :user
belongs_to :artwork
end
逻辑很简单:在找到 current_user (在 ArtView 中)喜欢的最后一个 Artwork 之后,找到也喜欢相同 Artwork 的其他用户(也在 ArtView 中),然后找到那些其他用户喜欢的新 Artwork 还没有被 current_user 看到( ArtView 中没有记录)
我正在使用以下联接:
@artwork = Artwork.joins(:artview)
.where(:artviews => { :liked => true})
.where(:artviews => { :artwork_id => @artwork_id})
.where.not(:artviews => { user_id: @id })
我收到以下错误:
Can't join 'Artwork' to association named 'artview'; perhaps you misspelled it?
非常感谢任何指导/建议(通常在修复错误和/或改进逻辑方面)
解决方案
一个 ArtView 有很多 ArtView,所以在使用joins
.
它应该像这样工作:
Artwork.joins(:art_views)
使用join
ed 列时相同(无论是哪种关系),都应该使用表的“真实”名称;它是复数形式——这就是 Rails 命名它创建的表的方式,除非另有说明:
Artwork
.joins(:art_views)
.where(:art_views => { :liked => true})
.where(:art_views => { :artwork_id => @artwork_id})
.where.not(:art_views => { user_id: @id })
推荐阅读
- django - django admin 导出为 pdf
- java - Scanner.read() 不拾取分隔符的间歇性错误
- c# - 我对统一的 fov 可视化脚本有疑问
- python - paho-mqtt python包中的连接被拒绝错误
- ruby - Ruby:通过 TCP 套接字发送字符串
- php - 在信用卡支付中使用 Stripe
- swift - 为什么我不能执行鼠标左键单击?
- objective-c - 将(Swift WatchKit)目标添加到(Objective-C iOS)应用程序
- php - Laravel:用户登录后抛出 MethodNotAllowedHttpException
- python - 需要将pandas相关高亮表(cmap Matplotlib)保存为png图片