2015-01-21 107 views
1

我的應用程序有用戶,植物和plantposts。這裏是我協會限制數據庫訪問量

class User 
    has_many: plants 
    has_many :plantposts, through: :plantposts 
end 

class Plant 
    has_many: plant_posts 
    belongs_to : user 
end 

我有活躍的廠家的名單,我想顯示這些工廠最近的(最多3個)plantposts,而不必作出每株數據庫調用。

我認爲這是一個好主意,使用一個調用plantpost表與所有活動植物的ID,並將結果放入散列,然後使用結果來構建我的網頁。

我不確定這是否是解決此問題的最佳方法,或者確切地說,如何首先構建對plantpost表的調用,或者獲得最終結果以顯示在第二個正確位置地點。

+0

可以在哈希映射 – Pavya 2015-01-21 05:40:01

+0

SQL語句極限存儲? – Darkmouse 2015-01-21 05:43:17

回答

0

我不確定你是否犯了錯誤複製或者如果你在實際代碼中有這個錯誤,但是你的類/模型定義對我來說有點奇怪。

您是不是要找他們是這樣的:

class User 
    has_many: :plant_posts 
    has_many: :plants 
end 

class PlantPosts 
    belongs_to: :user 
    belongs_to: :plant 
end 

class Plant 
    has_many: :plant_posts 
    belongs_to: :user 
end 

注:我沒寫任何presence驗證,因爲我還是有點不確定你的規則有關。

基本上這就是說有用戶可以擁有植物。用戶還可以爲某個工廠製作plant_posts,但該工廠不必這樣做。


無論如何,假設你有一個 active_plants方法保存的 Plant秒的數組:

# Query plant posts, ordered by mostly recently created, that are 
# for active_plants and return the top 3 
PlantPost.order(created_at: :desc).joins(:plants) 
    .where("plant_id = ?", [active_plants]).limit(3) 
+0

其實我沒有這些版本。我的用戶班擁有植物和plantposts植物。我的工廠類有許多plantposts和belongs_to只有一個用戶。和我的Plantpost類屬於用戶和工廠。儘管確實有一個plantpost只有一個用戶和一個工廠,但我不會在任何地方使用has_one協會,我不確定是否有必要拼出它。無論如何,一切工作正常到這一點。感謝這個答案,我現在就試試看。 – bobperlman 2015-01-21 22:13:56

+0

我只是想知道,如果爲Plant **和** PlantPost指定用戶不是多餘的,因爲這在技術上允許PlantPost引用屬於不同於它自己的用戶的工廠。這是你想要的方式嗎? – 2015-01-22 01:39:07

+0

不,完全沒有。我想要一個plantpost屬於一個單一的工廠,而這個工廠又屬於一個用戶。什麼是最好的表達方式? – bobperlman 2015-01-23 19:43:21