Rails中scopes的几种使用方法

不传参数使用scope方法
class User < ActiveRecord::Base
scope :finduser, {where(status: 'username')}
scope :has_content, {joins(:comment).where("comments.content is not null")}
end



传参数使用scope方法

class User < ActiveRecord::Base
scope :finduser, ->(username){ where(username: username) }
scope :has_content, ->(content){joins(:comment).where('comments.content = ?', content)}
end



class User < ActiveRecord::Base
scope :finduser, Proc.new { |username| where(username: username) }
scope :has_content, Proc.new{joins(:comment).where('comments.content = ?', content)}
end



class User < ActiveRecord::Base
scope :finduser, lambda { |username| where(username: username) }
scope :has_content, lambda{joins(:comment).where('comments.content = ?', content)}
end


class User < ActiveRecord::Base
def self.finduser username
where(username: username) unless username.empty?
end



def self.has_content content
lambda{joins(:comment).where('comments.content = ?', content)}
end
end


总结

当逻辑是简单的where/order这样的查询时使用scope;涉及到复杂查询时,使用类方法。
另外,当需要做一些扩展时,作为Active Record提供的一个特性,我还是推荐使用scope。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值