我有以下型号:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。