2017-02-18 82 views
0

我的數據模型:的Rails 3級協會

  • 集合屬於用戶。
  • 收藏有很多藝術。
  • 藝術屬於收藏品。

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_iduser_id到收藏表作爲索引並運行rake db:migrate

我也試過

has_many :arts, :through => :collections 

在用戶模式,但仍然得到了錯誤。

回答

-1

對於查詢

@arts = Art.where(:user => current_user) 

你需要在藝術已經user_id說明。

即你需要有

class Art < ApplicationRecord 
    belongs_to :collection 
    belongs_to :user 
end 
+0

這是對數據模型的根本性改變,也是不必要的改變。沒有必要爲'Art'添加冗餘'user_id'。 – meagar

0

有一個ArtUser之間沒有直接的聯繫,所以你不能簡單地通過子虛烏有場user查詢藝術。

如果你想找到所有的藝術是屬於給定用戶,你需要通過collections表,這是用戶綁定到藝術的唯一加盟:

Art.joins(:collection => :user).where(users: { id: current_user.id }) 
0

如果你有

has_many :arts, :through => :collections 

在用戶模式,然後使用

current_user.arts

獲取用戶的所有藝術。

如果你仍然越來越然後錯誤使用下面的查詢

Art.joins(:集合)。凡( '?collections.user_id =',current_user.id)

這應該做這項工作。