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