Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 帮助进行动态排序? 我有一个通知表,其中包含不同事件的不同类型的通知 表中有一个通知\u type:string列,其中包含通知类型,即“foo”或“bar”或“oof” 我希望用户能够选择他们想要显示的通知,因此结果下面有复选框,对应于用户模型中的prefs\u display\u foo:boolean,prefs\u display\u bar:boolean 在查找中设置:条件以正确显示排序结果的优雅方式是什么?另外,目前我在用户模型中将它作为一种方法,但是作为一个有很多:通知,:条件=>..的方法,我该如何做呢_Sql_Ruby On Rails - Fatal编程技术网

Sql 帮助进行动态排序? 我有一个通知表,其中包含不同事件的不同类型的通知 表中有一个通知\u type:string列,其中包含通知类型,即“foo”或“bar”或“oof” 我希望用户能够选择他们想要显示的通知,因此结果下面有复选框,对应于用户模型中的prefs\u display\u foo:boolean,prefs\u display\u bar:boolean 在查找中设置:条件以正确显示排序结果的优雅方式是什么?另外,目前我在用户模型中将它作为一种方法,但是作为一个有很多:通知,:条件=>..的方法,我该如何做呢

Sql 帮助进行动态排序? 我有一个通知表,其中包含不同事件的不同类型的通知 表中有一个通知\u type:string列,其中包含通知类型,即“foo”或“bar”或“oof” 我希望用户能够选择他们想要显示的通知,因此结果下面有复选框,对应于用户模型中的prefs\u display\u foo:boolean,prefs\u display\u bar:boolean 在查找中设置:条件以正确显示排序结果的优雅方式是什么?另外,目前我在用户模型中将它作为一种方法,但是作为一个有很多:通知,:条件=>..的方法,我该如何做呢,sql,ruby-on-rails,Sql,Ruby On Rails,你可以试试这个 保留has_many不带任何条件,然后创建一个命名的作用域来处理首选项,此代码未经测试 class User has_many :notifications def notification_preferences list = [] list << 'Foo' if prefs_display_foo list << 'Bar' if prefs_display_bar

你可以试试这个

保留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)
类用户
有很多:通知
def通知\u首选项
列表=[]

列出最棒的。我对命名范围有点陌生,但我可以将它们组合起来,对吗?也就是说,我还有一个prefs\u display\u results:integer表示他们想要多少结果,所以如果我添加另一个名为“limit”的作用域,我可以使用类似
notifications=user.notifications.preferred(user.notification\u preferences)。limit(user.prefs\u display\u results)
是的,可以链接命名的\u作用域(limit可能是保留字,不确定)没有关系。。。看看它,我只需扩展lambda查询,然后再次使用arrayThanks house,我真的很感激!)