我的数据模型:
Rails模型:
class User < ApplicationRecord
end
class Collection < ApplicationRecord
has_many :arts
belongs_to :user
end
class Art < ApplicationRecord
belongs_to :collection
end
问题代码:
def index
@arts = Art.where(:user => current_user)
end
错误讯息:
SQLite3::SQLException: no such column: arts.user: SELECT "arts".* FROM "arts" WHERE "arts"."user" = 1
我已将art_id
和user_id
添加到Collection表中作为索引并运行rake db:migrate
。
我也试过
has_many :arts, :through => :collections
用户模型中的但仍然出现错误。
答案 0 :(得分:0)
Art
和User
之间没有直接链接,因此您不能简单地通过不存在的字段user
查询艺术。
如果您想查找属于给定用户的所有艺术品,您需要通过collections
表加入,这是唯一将用户绑定到艺术品的表:
Art.joins(:collection => :user).where(users: { id: current_user.id })
答案 1 :(得分:0)
如果你有
has_many :arts, :through => :collections
在您的用户模型中,然后使用
current_user.arts
获取用户的所有艺术作品。
如果您仍然收到错误,请使用以下查询
Art.joins(:collection).where(&#39; collections.user_id =?&#39;,current_user.id)
这应该可以胜任。
答案 2 :(得分:-1)
查询
@arts = Art.where(:user => current_user)
您需要在Art中使用user_id。
即你需要
class Art < ApplicationRecord
belongs_to :collection
belongs_to :user
end