限制数据库命中

时间:2015-01-21 05:36:56

标签: ruby-on-rails

我的应用有用户,植物和植物。这是我的协会

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

class Plant
  has_many: plant_posts
  belongs_to : user
end

我有一份活跃的植物清单,我想展示这些植物的最新(3个最大)植物柱,而不必在每个植物上进行数据库调用。

我认为使用所有活动植物的id对plantpost表进行一次调用并将结果放入哈希值然后使用结果来构建我的网页是个好主意。

我不确定这是否是解决此问题的最佳方法,或者确切地说是如何构建对植物柱表的调用,或者最终结果显示在该位置的正确位置第二名。

1 个答案:

答案 0 :(得分: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)