ruby-on-rails – 活动记录:预先加载与参数的关联
发布时间:2020-12-17 02:38:15 所属栏目:百科 来源:网络整理
导读:我有以下型号: class Rating ActiveRecord::Base belongs_to :item belongs_to :userendclass Item ActiveRecord::Base has_many :ratingsend 我想获取所有项目,以及特定用户的评级,以显示每个项目旁边的当前用户评级(如果存在!). 我试过了… Item.include
我有以下型号:
class Rating < ActiveRecord::Base belongs_to :item belongs_to :user end class Item < ActiveRecord::Base has_many :ratings end 我想获取所有项目,以及特定用户的评级,以显示每个项目旁边的当前用户评级(如果存在!). 我试过了… Item.includes(:ratings).where('ratings.user_id = ?',user_id) …但是没有给我没有评级的项目. 我的第一个想法是与参数的has_many关联,然后使用includes方法传递该参数.但这似乎并不存在. 如何在不执行N 1查询或将所有实体加载到内存中的情况下,在参数上过滤所有帖子和预先加载的关联? 解决方法
步骤1
使模型层中的current_user可访问(此处概述了一种技术:https://stackoverflow.com/a/2513456/163203) 第2步 添加与在运行时评估的条件的关联. Rails 2 class Item < ActiveRecord::Base has_many :ratings has_many :current_user_ratings,:class_name => "Rating",:conditions => 'ratings.user_id = #{User.current_user.try(:id)}' end Rails 3.1及以上版本 class Item < ActiveRecord::Base has_many :ratings has_many :current_user_ratings,:conditions => proc { ["ratings.user_id = ?",User.current_user.try(:id)] } end 第3步 Item.includes(:current_user_ratings) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |