Tag: join

选择Active Record中的内部连接的所有列

在Ruby on Rails指南中,我看到了使用Joins的示例。 例如 Category.joins(:posts) 导致查询 SELECT categories.* FROM categories INNER JOIN posts ON posts.category_id = categories.id 这一切都很好,但是如何使用Active Record返回类别和post列? 或者我完全错过了SQL的东西?

通过两个“has_many”子表的总和来排序查询?

在我的应用程序中, Invoice has_many item_numbers和Invoice has_many payments 。 每张发票都有一个余额,它是ItemNumber金额属性的总和,减去付款金额属性的总和。 在发票模型中很容易计算余额,但我正在尝试编写一个按余额对发票进行排序的查询,这在ActiveRecord / SQL中更难实现。 我已成功设法使用以下查询在item_numbers的总数上订购发票(感谢Daniel Rikowski): Invoice.where(user_id: 1, deleted: false, status: ‘Sent’) .joins(:item_numbers) .select(‘invoices.*, sum(item_numbers.amount)’) .group(‘invoices.id’) .order(‘sum(item_numbers.amount) asc’) .limit(20) 我试图通过下面的平衡来扩展这个顺序; Invoice.where(user_id: 1, deleted: false, status: ‘Sent’) .joins(:item_numbers) .joins(“FULL OUTER JOIN payments ON payments.invoice_id = invoices.id”) .select(“invoices.*, sum(item_numbers.amount_with_gst) – COALESCE(sum(payments.amount), 0)”) .group(“invoices.id”) .order(“sum(item_numbers.amount_with_gst) – COALESCE(sum(payments.amount), 0) #{dir}”)/ 此查询存在两个问题。 首先,它非常丑陋,其次,它不起作用。 […]

两个表作为Rails中的一个模型

是否可以在rails中设置依赖于两个表的连接的模型? 这意味着,为了找到/更新/销毁模型记录,需要在连接中链接在一起的两个数据库表中的两个记录。 该模型将只是两个表的所有列包装在一起,然后可以用于表单等。 这样,当模型被创建/更新时,它只是一个应用于模型的表单变量哈希? 在Rails 2或3中这可能吗?

向ON子句添加参数的任何可能方法都包括在rails上的左连接?

我有一个如此巨大的复杂查询: @objects = Object.joins({ x: :y }).includes( [:s, { x: { y: :z } }, { l: :m },:q, :w, { important_thing: [:h, :v, :c,:l, :b, { :k [:u, :a] }] } ]).where(conditions).order(“x.foo, x.bar”) 然后我想显示所有Objects和仅在两个日期之间创建的Important_things事件。 如果我把它放在那里我没有获得所有Objects子句,只有在知情日期之间具有Important_things Objects 。 使用原始sql的解决方案是这样的: select * from objects left join important_things on important_things.object_id = objets.id and important_things.created_at between ‘x’ and […]

Rails:has_many:through或has_many_and_belongs_to?

我有一个应用程序,我想通过另一个模型(即Task1> Relationship <Task2)将模型的实例链接到同一模型的另一个实例,我想知道我是否可以使用has_many:through。 基本上,关系模型将具有额外信息(type_of_relationship,lag),因此将其作为连接模型是理想的。 但是,没有两个模型可以加入,只有一个……自己。 has_many:还能继续吗? 如果是这样,联接表将如何显示? 使用Rails约定,您将有两个名为Activity_id的列,这显然不适用于数据库。 或者,我可以使用has_many_and_belongs_to在任务模型和关系模型之间设置多个但我不确定这是否准确地描述了一个只能在任何一个关系模型中链接两个任务模型的关系(当然,当然任务可能属于多个关系,因此可能属于多个关系。 我的直觉说与has_many_and_belongs_to一起使用并整理模型中的规则但是有更好的方法吗? 我正绕着这一圈转圈! 任何帮助赞赏。

rails加入多态关联

我在名为Notifiaction的模型中有一个名为Notifiable的ploymorphic关联: module Notifiable def self.included(base) base.instance_eval do has_many :notifications, :as => :notifiable, :inverse_of => :notifiable, :dependent => :destroy end end end class Bill < ActiveRecord::Base include Notifiable end class Balance true belongs_to :bill, foreign_key: ‘notifiable_id’, conditions: “notifiable_type = ‘Bill'” belongs_to :balance, foreign_key: ‘notifiable_id’, conditions: “notifiable_type = ‘Balance'” end 当我尝试加入通知时通知( Notification.joins{notifiable} notifiable Notification.joins{notifiable} – 它是吱吱声,活动记录代码会有相同的结果)我得到错误: ActiveRecord::EagerLoadPolymorphicError: […]

与ActiveRecord和Rails 3的复杂JOIN

我有以下型号: class User :memberships end class Group :memberships end class Membership < ActiveRecord::Base belongs_to :user belongs_to :group end class Post < ActiveRecord::Base belongs_to :group end 我必须找到属于用户所属组的所有post。 我用这种方法做到了: @post = Post.joins(:group => {:memberships => :user}).where(:memberships => {:user_id => current_user.id}) 但它会产生效率低下的SQL: SELECT “posts”.* FROM “posts” INNER JOIN “groups” ON “groups”.”id” = “posts”.”group_id” INNER JOIN “memberships” ON “memberships”.”group_id” […]

使用Ruby / Rails ORM建模inheritance

我正在尝试为一个简单的博客系统建模这个inheritance 博客有许多Entries ,但它们的性质可能不同。 我不想为Blog表建模,我关心的是条目: 最简单的条目是具有title和text 但是, Quote没有标题并且有短文 Media有url和comment …… 等等… 使用Ruby on Rails对此进行建模的正确方法是什么? 那是 我应该使用ActiverRecord还是切换到DataMapper? 我想避免使用大量空单元格的“一大表”方法 当我将数据拆分为Entry + PostData , QuoteData等我可以在这些数据中拥有belongs_to :entry而没有has_one ??? 在Entry课程? 这将是在sql和entry.post_data执行此操作的标准方法。可以通过postdata表中的postdata解析postdata 。 编辑:我不想模拟Blog表,我可以这样做,我关心的是条目以及如何将inheritance映射到表。

Ruby在哈希中组合元素

我有一个看起来像这样的: data = {abc -> [[date1, val1], [date2,val2]], def -> [[date1,val3], [date2,val4]]} 我想加入abc和def元素,所以就像这样: data = {join -> [[date1, val1+val3], [date2, val2+val4]] } 我该如何解决这个问题。 请注意,哈希中还有其他元素不应被修改。

需要使用范围嵌套连接的ActiveRelation

我是铁杆新手。 爆炸了。 但查询API给我带来了一些麻烦。 我一直在缩放并且很快就做了很多事情,但这是我第一次花费数小时试图解决这个问题。 它不像我之前使用的任何东西 – 常规SQL,或Hibernate,或其他任何东西。 我的模型非常简单。 PrivateMessage有许多收件人 收件人有一个接收者(类用户) 收件人还有’is_read’和’is_deleted’字段 我的目标是构建一个查询,查找给定用户的所有未读和未删除的私人消息。 为实现这一目标,我们需要将“private_messages”加入“收件人”……然后将“收件人”加入“用户”。 这是相关的用户模型代码: has_many :sent_messages, :class_name => ‘PrivateMessage’, :foreign_key => ‘sender_id’ has_many :recipient_of_messages, :class_name => ‘Recipient’, :foreign_key => ‘receiver_id’ scope :by_id, lambda { |id| where(:id => id) } 我的收件人模型具有以下相关代码: belongs_to :receiver, :class_name => ‘User’, :foreign_key => “receiver_id” belongs_to :private_message scope :unread, where(:is_read => false).where(:is_deleted […]