首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails三级协会

Rails三级协会
EN

Stack Overflow用户
提问于 2017-02-18 15:01:18
回答 3查看 121关注 0票数 0

我的数据模型:

  • 集合属于用户。
  • 收藏有很多艺术。
  • 艺术属于收藏品。

Rails模型:

代码语言:javascript
运行
复制
class User < ApplicationRecord
end

class Collection < ApplicationRecord
  has_many :arts
  belongs_to :user
end

class Art < ApplicationRecord
  belongs_to :collection
end

问题代码:

代码语言:javascript
运行
复制
def index
  @arts = Art.where(:user => current_user)
end

错误消息:

代码语言:javascript
运行
复制
SQLite3::SQLException: no such column: arts.user: SELECT "arts".* FROM   "arts" WHERE "arts"."user" = 1

我已经将art_iduser_id作为索引添加到Collection表并运行rake db:migrate

我也试过

代码语言:javascript
运行
复制
has_many :arts, :through => :collections 

在用户模型中仍然得到了错误。

EN

回答 3

Stack Overflow用户

发布于 2017-02-18 15:49:22

ArtUser之间没有直接联系,所以您不能简单地通过不存在的字段user来查询艺术。

如果要查找属于给定用户的所有art,则需要通过collections表进行连接,这是将用户绑定到art的唯一方法:

代码语言:javascript
运行
复制
Art.joins(:collection => :user).where(users: { id: current_user.id })
票数 0
EN

Stack Overflow用户

发布于 2017-02-18 19:29:52

如果你有

代码语言:javascript
运行
复制
has_many :arts, :through => :collections

在您的用户模型中使用

current_user.arts

为了获得一个用户的所有艺术。

如果仍有错误,请使用以下查询

Art.joins(:collection).where('collections.user_id = ?',current_user.id)

这应该能胜任这份工作。

票数 0
EN

Stack Overflow用户

发布于 2017-02-18 15:38:37

用于查询

代码语言:javascript
运行
复制
@arts = Art.where(:user => current_user)

你需要艺术方面的user_id。

也就是说,你需要

代码语言:javascript
运行
复制
class Art < ApplicationRecord
  belongs_to :collection
  belongs_to :user
end
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42316777

复制
相关文章

相似问题

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