新手问题 在 scope 中如何对某字段的值进行处理

hicupp · 2013年10月09日 · 最后由 lululau 回复于 2013年10月10日 · 2103 次阅读

问题描述: 一个常见的 scope 是这样的:

scope :compare, lambda { |sth| :conditions => ['content = ?', sth] }

调用:

model.compare(sth)

我们做的是将传入的 sth 与字段 content 比较,有没有办法能在 scope 里动态地拿到 content 字段的内容做一些处理?

如这种形式:

scope :compare, lambda { |sth| :conditions => ['t[:content].do_some_solve = ?', sth] }

scope :compare, lambda { |sth| 
  sth = sth.strip
  condition = ['content = ?', sth]
  where(condition)
}

能看懂么?

lz 貌似要做的有问题,比如它 search 一个 name 为 david,但是它传 sth 是 da,那么,so_some_solve 来截取它的前两个字符后,再比较是否返回该结果。

如果是这个设计情景,那么它设计逻辑一定有问题。

#2 楼 @liwei78 我觉得我给的代码就是楼主需要的。里克,你怎么看?

#2 楼 @liwei78 是这样的,我从其它网页那爬到一些信息放到数据库,其中有一个字段是时间,正常是转化 sth 然后与 content 字段比较,但是我想做的是转化字段值,然后和传进来的参数 sth 比较,我试了很多方法都不好使,最后妥协将一次查询的结果再进行一次遍历筛选操作搞定。多谢诸位关注帮忙~

应该没办法。。。 还有,Rails Guide (http://guides.rubyonrails.org/active_record_querying.html#passing-in-arguments) 里说,带参数的 scope 最好用 class method 代替

需要 登录 后方可回复, 如果你还没有账号请 注册新账号