【问题标题】:Help doing a dynamic sort?帮助进行动态排序?
【发布时间】:2010-06-05 07:45:36
【问题描述】:
  • 我有一个通知表,其中包含针对不同事件的不同类型的通知。
  • 表格内部是一个notifications_type:string 列,其中包含通知类型,即“foo”或“bar”或“oof”
  • 我希望用户能够选择他们想要显示的通知,因此结果下方有对应于用户模型中prefs_display_foo:boolean, prefs_display_bar:boolean 的复选框。
  • 在查找中设置:conditions 以正确显示排序结果的优雅方法是什么?另外,目前我将它作为用户模型中的一种方法,但我将如何将其作为has_many :notifications, :conditions => .....

【问题讨论】:

    标签: sql ruby-on-rails


    【解决方案1】:

    你可以试试这个

    不带任何条件保留has_many,然后创建一个named_scope来处理首选项,此代码未经测试

    class User
        has_many :notifications  
    
        def notification_preferences
            list = []
            list << 'Foo' if prefs_display_foo
            list << 'Bar' if prefs_display_bar    
            # etc...
            return list
        end
    end
    
    class Notification
        belongs_to :user
    
        named_scope :preferred,
            lambda { |preferences| {
                :conditions => ["notifications_type IN (?)", preferences]
                }
            }
    end
    
    # ...
    user = User.find(1)
    notifications = user.notifications.preferred(user.notification_preferences)
    

    【讨论】:

    • 太棒了。我对命名范围有点陌生,但我可以将它们组合起来吗?意思是,我还有一个 prefs_display_results:integer 他们想要多少结果,所以如果我添加另一个名为“limit”的范围,我可以使用类似 notifications = user.notifications.preferred(user.notification_preferences).limit(user .prefs_display_results)
    • 是的,你可以链接named_scopes(限制可能是保留字,不确定)
    • 没关系...看看它,我将扩展 lambda 查询和数组
    • 再次感谢房子我真的很感激! :)
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2012-08-29
    • 2011-05-05
    • 2014-06-29
    • 2015-06-28
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多