Tag: active relation

Rails:ActiveRecord在哪里vs合并

首先,我得到特定日期之间的审核状态。 date_range = Date.parse(@from_date).beginning_of_day..Date.parse(@to_date).end_of_day @review_statuses = ReviewStatus.where(updated_at: date_range) 接下来,我需要应用’AND’条件。 @review_cycle = params[:review_cycle] if @review_cycle.present? @review_statuses = @review_statuses.merge( ReviewStatus.where(evidence_cycle: @review_cycle) .or(ReviewStatus.where(roc_cycle: @review_cycle))) end 现在,对于下面我应该应用’where’或’merge’。 @status = params[:status] @review_statuses.where(evidence_status: :pass, roc_status: :pass) if @status == ‘pass’ 有人可以解释,我们什么时候应该使用merge而不是where ?

ActiveRelation将如何影响rails的includes()的function?

我查看了Arel源代码,以及Rails 3.0的一些activerecord源代码,但我似乎无法为自己收集一个很好的答案,因为在构造查询时Arel是否会改变我们使用includes()的能力, 为了更好。 有些情况下,人们可能想要修改activerecord上的条件:包括2.3.5及之前的查询,以及将返回的关联记录。 但据我所知,这对所有人来说都不是以编程方式成立的:包含查询: (我知道一些AR-find-includes make t#{n} .c#{m}重命名所有属性,可以想象为这些查询添加条件以限制连接集的结果;但其他人做n_joins + 1个数字迭代地对id设置的查询,我不确定如何破解AR来编辑这些迭代查询。) Will Arel允许我们构造ActiveRecord查询,在使用includes()时指定结果关联的模型对象? 例如: User :has_many posts( has_many :comments) User.all(:include => :posts) #say I wanted the post objects to have their #comment counts loaded without adding a comment_count column to `posts`. #At the post level, one could do so by: posts_with_counts = Post.all(:select => ‘posts.*, […]

将SQL查询转换为ActiveRecord Relation

如何将以下SQL查询转换为ActiveRecord关系,以便我可以使用范围扩展它? WITH joined_table AS ( SELECT workout_sets.weight AS weight, workouts.user_id AS user_id, workouts.id AS workout_id, workout_sets.id AS workout_set_id, workout_exercises.exercise_id AS exercise_id FROM workouts INNER JOIN workout_exercises ON workout_exercises.workout_id = workouts.id INNER JOIN workout_sets ON workout_sets.workout_exercise_id = workout_exercises.id ORDER BY workout_sets.weight DESC ), sub_query AS ( SELECT p.user_id, MAX(weight) as weight FROM joined_table p GROUP BY […]

如何使用ActiveRelation编写UNION链?

我需要能够使用ActiveRelation使用UNION链接任意数量的子选择。 我对ARel的实现有点困惑,因为它似乎假设UNION是一个二进制操作。 然而: ( select_statement_a ) UNION ( select_statement_b ) UNION ( select_statement_c ) 是有效的SQL。 如果不做令人讨厌的字符串替换,这可能吗?

Rails中两个类之间的多个belongs_to关系

我有一个Transaction类。 此类的每个对象包括一个发卡帐户,一个发送帐户和一个接收帐户。 其中每个都是Account类的实例。 在我的Transaction表中,我有issuer_id,sender_id和receiver_id。 我应该如何指定交易和账户之间的关系,以便我可以打电话 transaction.issuer transaction.sender transaction.receiver 谢谢。

如何让Rails获得急切的负载计数?

这与一年前的一个问题有关。 我提出了一个开箱即用的问题示例,只要你有sqlite3可用: https : //github.com/cairo140/rails-eager-loading-counts-demo 安装说明(主分支) git clone git://github.com/cairo140/rails-eager-loading-counts-demo.git cd rails-eager-loading-counts-demo rails s 我在存储库中有更全面的文章,但我的一般问题是这个。 如何以最小化数据库查询的方式使Rails急切加载计数? 只要在关联上使用#count ,就会出现n+1问题,尽管在ActiveRelation中通过#includes(:associated)包含了该关联。 一个解决方法是使用#length ,但只有当它被调用的对象已被加载时才能正常工作,更不用说我怀疑它复制了Rails内部已经完成的东西。 此外,使用#length一个问题是,当开始时没有加载关联并且只需要计数时,它会导致不幸的过载。 从自述文件: 我们可以通过在posts数组上运行#length来避免这个问题(参见附录),这已经加载了,但是也可以随时获得数量。 它不仅更加一致; 它提供了一种访问路径,不一定需要加载post。 例如,如果你有一个部分显示计数,无论什么,但有一半的时间,部分是在加载post和一半时间没有调用,你面临以下情况: 使用#count n已加载post时的COUNT样式查询 n尚未加载post时的COUNT样式查询 使用#length 在已加载post时将其他查询归零 当post尚未加载时,n *样式查询 在这两种选择之间,没有主导选择。 但是修改#count来推迟#length或访问存储在幕后的其他方式的长度会很好,这样我们就可以得到以下场景: 使用修改后的#count 在已加载post时将其他查询归零 n尚未加载post时的COUNT样式查询 那么这里的正确方法是什么? 有没有我忽略的东西(非常非常可能)?

ActiveRecord和ActiveRecord :: Relation对象之间的区别

我已搜索但无法找到ActiveRecord和ActiveRecord :: relation对象之间差异的简要说明。 我知道ActiveRecord是通过类似的东西找到的单个对象 User.find(1) 而ActiveRecord :: Relation就是像对象一样的数组 User.where(id: 1) 我在查询执行或对它们的深入解释方面寻找它们之间的区别,因此它将清除它背后的整个概念。 提前致谢!

ActiveRecord Association选择包含记录的计数

例 class User has_many :tickets end 我想创建包含用户计数票据逻辑的关联,并在包含中使用它(用户has_one ticket_count) Users.includes(:tickets_count) 我试过了 has_one :tickets_count, :select => “COUNT(*) as tickets_count,tickets.user_id ” ,:class_name => ‘Ticket’, :group => “tickets.user_id”, :readonly => true User.includes(:tickets_count) ArgumentError: Unknown key: group 在这种情况下,include中的关联查询应该使用count with group by …如何使用rails实现这一点? 更新 我不能改变表结构 我希望AR为包含的用户集合生成1个查询 UPDATE2 我知道SQL,我知道如何用连接选择它,但我的问题现在就像“如何获取数据”。 我的问题是关于建立我可以在包含中使用的关联。 谢谢 Update3我尝试创建像用户has_one ticket_count创建的关联,但是 看起来像has_one不支持关联扩展 has_one不支持:组选项 has_one不支持finder_sql