代码之家  ›  专栏  ›  技术社区  ›  Kevin

帮助进行动态排序?

  •  0
  • Kevin  · 技术社区  · 15 年前
    • 我有一个通知表,其中包含针对不同事件的不同类型的通知。
    • 桌子里面有一个 notifications_type:string 包含通知类型的列,即“foo”或“bar”或“oof”
    • 我希望用户能够选择要显示的通知,因此结果下面有对应的复选框 prefs_display_foo:boolean, prefs_display_bar:boolean 在用户模型中。
    • 我用什么优雅的方式 :conditions 在查找中是否正确显示排序结果?另外,目前我在用户模型中将它作为一种方法,但是我将如何作为 has_many :notifications, :conditions => .....
    1 回复  |  直到 15 年前
        1
  •  1
  •   house9    15 年前

    你可以试试这个

    让has_many不带任何条件,然后创建一个命名的_作用域来处理首选项,此代码未经测试

    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)