【问题标题】:how to filter down a scope in active record using if then?如何使用 if then 过滤活动记录中的范围?
【发布时间】:2013-06-17 18:23:35
【问题描述】:

我有一个模型,它可以是草稿或已发布的形式。如果模型是草稿,我使用布尔属性 Draft 设置为 true。如果项目不再是草稿,则设置为 false。

当我拉出所有这些模型的列表时,我希望草稿只对创建者可见。同时返回所有其他模型。

scoped = Model.All( if(:draft => true) ) 然后只选择返回 if (:creator_id => params[:currentUser)

我希望它返回除不属于当前用户的草稿之外的所有模型。因此,scoped 只会包含当前用户创建的草稿,并且仍会包含草稿设置为 false 的所有模型。

我可以对活动记录执行此操作,还是必须执行一些 SQL CASE 语句?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    你能试试这样的东西吗(postgres)?

    scope :for_user, lambda { |u| where("draft != 't' or (draft = 't' and creator_id = ?)", u.id) }
    

    【讨论】:

    • 新手问题在这里。如何访问/使用范围?
    • 感谢您的帮助 HagrimmTheBleak。我最终使用了它,它似乎有效: scoped = scoped.where("draft !='t' OR (draft = 't' and creator_id = ?)", params[:currentUserID] )
    • 抱歉,我没能早点回来。范围几乎可以作为模型上的类方法访问,例如Model.for_user(me)。好在你已经想通了。如果有帮助,你能接受答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2019-03-10
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多