如何从Arel输出中获取数据?

时间:2018-02-26 16:45:23

标签: ruby-on-rails ruby activerecord arel

我成功完成了here列出的一些命令,并将它们应用到我自己的表中。

如何将输出转换为实际记录/数据?现在它返回了一些我可以分配给变量的输出,但我根本不理解这个输出......它看起来不像数组或散列(但也许它是),我做的不明白如何访问其内容(我想在rails视图中使用输出,但至少想访问我执行Arel代码的控制台中的表记录)

例如,假设我有两张桌子;用户和产品如下:

User = [{:id => 1, :name => "Joe", :email => "joe@gmail.com"}, {:id => 2, :name => "Jane", :email => "jane@gmail.com"}]

Product = [{:product_name => "Car Tire", :brand => "BMW", :last_edited_by => 1}, {:product_name => "Paint Brush", :brand => "Dulux", :last_edited_by => nil}, {:product_name => "Dog Biscuits", :brand => "Bowow Snacks", :last_edited_by => 2}, {:product_name => "Game", :brand => "Westwood", :last_edited_by => 1}]

假设我想加入两个表User.id = Product.last_edited_by

在SQL中它就像:

一样简单
SELECT *
FROM User
JOIN Product
WHERE users.id = products.last_edited_by

现在如果我将它插入scuttle.io转换为Arel,它会给出:

User.select(Arel.star).where(
  User.arel_table[:id].eq(Product.arel_table[:last_edited_by])
).joins(
  User.arel_table.join(Product.arel_table).on(null).join_sources
)

但尝试此操作会返回:ArgumentError:参数数量错误(给定1,预期为0)

试图模仿给出here的建议,我提出了另一种方法:

users.project(Arel.star).join(User).on(Product[:last_edited_by].eq(User[:id]))

但是这会返回:NoMethodError:未定义的方法`project' for Array ..

最后一点,如果我跑

users = Arel::Table.new(User)
output = users.project(users[:id].as("id"), users[:id].count.as("count")).group("id")

我得到了一些看起来几乎有意义的输出,但我不知道如何将其归结为我能理解的东西,如果我提供给它,我也不会知道如何使用它。 rails视图

0 个答案:

没有答案