我正在使用范围来获取特定用户的项目:
在物品模型中
belongs_to :user
scope :for_user, lambda { |user| where(:user_id => user) }
用户模型
has_many :items
问题
调用Item.includes(:user).for_user(3)
时,返回的是Array而不是ActiveRecord关系。
我希望它的行为类似Item.includes(:user).find_by_user_id(3)
,它返回一个ActiveRecord关系。
感谢您的帮助。
答案 0 :(得分:3)
如果你做更多的调查,你会发现它确实会返回一个关系对象。
但它会在必要时将其转换为数组。
即,如果您在控制台中并说> Item.includes(:user).for_user(3)
,它会尝试检查它,然后进行转换。
但无论如何,以下方法都可行
scope = Item.includes(:user).for_user(3)
# does a db count
scope.count
# does a db select limit 1
scope.first
# does a full db select
scope.all
答案 1 :(得分:0)
使用where(:user_id => user)
而不是像find_by_user_id这样的动态方法总会返回一个数组。如果您只对范围内返回的第一条记录感兴趣,可以将范围更改为
scope :for_user, lambda { |user| where(:user_id => user).first }