Tag: sql

从ActiveRecord获得排名

如果User有积分,我如何获得用户排名,假设标准定位: require ‘active_record’ class User [, , , ] User.find_by_id(2).rank # => 1 User.find_by_id(3).rank # => 3 User.find_by_id(1).rank # => 3 我得到了明显的印象,这将是数据库密集型。 我并不太担心,但显然需要较少处理能力的解决方案才是赢家! 如果给予具有相同数量的点的两个用户相同的等级太复杂,我准备接受上面的用户1可以是等级3,而用户3可以是等级4。 编辑: 我实际上是在一个单独的课堂上分享gmy分数 – 因为每个事件都需要一定数量的分数。 class Event < ActiveRecord::Base belongs_to :user end class User ?’,points]) + 1 end end 关于如何使这更简洁的任何想法? 提前致谢

如何在SQLite3和Rails 3.1中打开REGEXP?

我使用SQLite3数据库在Rails 3中有以下语句: word = ‘Hello’ word_entry = Word.where(“name REGEXP :word”, {:word => “[[::]]”}) 但是,在SQLite3下运行时,我不断得到: SQLite3 :: SQLException:没有这样的函数:REGEXP 我在SQLite3文档中读到它确实支持REGEXP函数。 在我的gemfile中,我有这条线 gem ‘sqlite3’ 我的数据库配置文件如下所示: development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 有什么想法正在发生什么? 解决方案:我最终找到了这个解决方案 。 不幸的是,它不适用于Rails 3.因此,为了使用正则表达式,我最终切换到MYSQL而不是SQLite3。

在数据库中清晰地表示电子商务产品和变体

我有一个我正在建设的电子商务商店。 我正在使用Rails / ActiveRecord,但实际上没有必要回答这个问题(但是,如果您熟悉这些内容,请随时回答Rails / AR)。 商店的要求之一是它需要代表两种类型的产品: 简单的产品 – 这些产品只有一个选项,例如乐队的CD。 它有基本的价格和数量。 有变化的产品 – 这些产品有多种选择,例如有3种尺寸和3种颜色的T恤。 尺寸和颜色的每种组合都有自己的价格和数量。 我过去做过这种事情,做了以下事情: 有产品表,其中包含产品的主要信息(标题等)。 有一个变量表,其中包含每种变体的价格和数量信息。 产品 has_many 变种 。 对于简单的产品 ,它们只有一个关联的Variant 。 有没有更好的方法可以做到这一点?

Rails查询通过仅限于最新记录的关联?

class User has_many :books 我需要一个返回的查询: 最近一本书的用户:complete => true。 即如果用户最近的书有:complete => false,我不希望它们出现在我的结果中 。 到目前为止我有什么 User.joins(:books).merge(Book.where(:complete => true)) 这是一个很有希望的开始,但没有给我我需要的结果。 我尝试添加.order(“created_on desc”).limit(1) 到上面的查询结束但是当我期待很多时,我最终只得到一个结果。 谢谢!

将每个SQL查询记录到Rails中的数据库

我想保存一些SQL查询rails执行的日志文件(即CREATE,UPDATE和DELETE),因此我需要拦截所有查询,然后使用一些regexp过滤它们并根据需要记录它们。 我会把这样的东西放在rails代码中?

在选择预定项目时,在Postgres中计算DST

我有一个Postgres 时钟闹钟表(不是真的,但这是类似的,更容易解释)。 用户以1小时的分辨率设置警报,用户可以来自许多不同的时区。 警报每天重复。 我想要可靠地获取应该在一天中的特定时刻发生的警报,并且我遇到了夏令时问题 。 我该如何以最好的方式做到这一点? 例 阿尔弗雷德和洛塔都住在斯德哥尔摩(从UTC开始+1小时,但是在夏令时+ 2小时)。 Sharon住在新加坡(距离UTC +8小时,没有夏令时) 在冬季,阿尔弗雷德在凌晨4点发出警报。 警报应该在当地时间凌晨4点全年开始。 夏季,洛塔在凌晨5点发出警报。 它应该全年都在凌晨5点出发。 与此同时,沙龙已经在上午11点发出警报。 所有这些都可以03:00 UTC的forms存储在数据库中。 如果我在冬天查询数据库以获取应在03:00 UTC发出的警报,我想要Alfred和Sharon的警报。 新加坡现在离瑞典只有7小时,所以新加坡上午11点在瑞典凌晨4点。 洛塔的警报不应再持续一小时。 相反,如果我在夏天查询数据库以获取应在03:00 UTC发出的警报,我想要Lotta和Sharon的警报。 新加坡现在离瑞典只有6小时,所以新加坡上午11点在瑞典上午5点。 斯文的闹钟在一小时前响起。 如何存储,查询数据库? 如有必要,我可以更改数据库架构。 目前,我们根本没有调整DST,事实上只有一个“小时”整数字段(看起来很愚蠢,时间字段会更好)。 我似乎需要存储UTC时间和时区信息,但我不知道如何在Postgres中最好地实现这一点。 我发现Postgres有一些时区概念,但据我所知,没有时区字段类型。 另外,我想我需要在SQL中进行一些计算,以确定如何根据时区数据和创建日期来偏移select中的UTC时间。 我对SQL不太满意…… 我确实想在Postgres中解决这个问题,因为可能存在很多“警报”,我想避免将所有这些问题都引入Ruby并在那里过滤所带来的性能问题。 (是的,这是一个Rails应用程序。)

如何将嵌套集中的所有记录呈现为真正的html树

我在我的Rails项目中使用了awesome_nested_set插件。 我有两个看起来像这样的模型(简化): class Customer < ActiveRecord::Base has_many :categories end class Category :customer_id validates_presence_of :name # Further validations… end 数据库中的树按预期构造。 parent_id , lft和rgt所有值都是正确的。 树有多个根节点(当然在awesome_nested_set允许)。 现在,我想在一个正确排序的树中呈现给定客户的所有类别,例如结构:例如嵌套的 标签。 这不会太难,但我需要它才能有效(sql查询越少越好)。 更新:计算出可以在没有进一步SQL查询的情况下计算树中任何给定节点的子节点数: number_of_children = (node.rgt – node.lft – 1)/2 。 这并不能解决问题,但可能会有所帮助。