我在数据库课程中,教师希望我们开发一个电子商务应用程序。她说我们可以使用我们喜欢的任何框架,现在我们已经在学期中途,她认为Rails做得太多了,并希望我明确地编写我的SQL查询。
所以,我想做的是编写我自己的函数并将它们添加到模型中,以基本上复制已有的功能(但我自己编写的SQL)。
所以问题就变成了:
另外,我知道这是多么可怕的做法,我现在不想在PHP中重新开始。
答案 0 :(得分:4)
我认为,你应该知道2-3个必要的方法,才能使用它。 (假设我们至少有2个型号,订单和用户(客户订购)) 例如,只需在数据库上运行查询,请使用:
Order.connection.execute("DELETE FROM orders WHERE id = '2')
从数据库中获取对象的数量,最好的方法是使用方法“count_by_sql”,它是可扩展的。我在我的项目中使用它,其中表有超过500,000条记录。所有计算应用程序的工作都给数据库带来了好处,它比app更有效率。
Order.count_by_sql("SELECT COUNT(DISTINCT o.user_id) FROM orders o")
此查询获取所有拥有订单的uniq用户的数量。我们可以“加入”表格,使用“ORDER BY”和组结果订购结果。
和最经常使用的方法:find_by_sql
Order.find_by_sql("SELECT * FROM orders")
它会返回一个带有ruby对象的数组。
答案 1 :(得分:2)
假设您有购买
class Purchase < ActiveRecord:Base
def Purchase.find(id)
Purchase.find_by_sql(["Select * from purchases where id=?", id])
end
end
也许您想要特定购买的产品。您可以在购买模型中手动定义purchase_items。
class Purchase < ActiveRecord:Base
def purchased_items
PurchasedItem.find_by_sql(["Select * from purchased_items where purchase_id=?",self.id])
end
end
例如,在您的控制器中,您现在想要购买特定购买的商品,现在可以执行此操作
@purchase = Purchase.find(params[:id])
@purchased_items = @purchase.purchased_items
如果需要与数据库建立更原始的连接,可以查看ActiveRecord:Base.connection.execute(sql)