我知道如何调用SQL来从已定义的模型中选择数据,如下所示:
Friend.find_by_sql(["...."])
我的问题是,如果我需要模型未定义的信息,我该怎么办?
我有一个Meal表,Friend表和Component表。成分构成膳食,朋友可能对成分过敏。我有一个SQL命令(由于机密性原因,我不能在这里发布,但实际上并不相关),返回一个friend_id和component_id给定一个Meal。也就是说,它返回一个行列表(每行有两列,friend_id和component_id),告诉我哪些朋友对给定膳食中的哪些成分过敏。但我不知道如何将它存储在Ruby中的变量中并访问该信息。
给出一些伪代码让你知道我想做什么:
@allergies_for_a_meal = ....<INSERT SQL QUERY HERE>...
@friends_who_are_allergic = Friends.find_by_id(@allergies_for_a_meal.friend_id)
有人可以让我知道这个的正确语法吗?
答案 0 :(得分:0)
如果您在ActiveRecord::Base
子类(例如模型)中,那么您将可以通过connection
访问当前数据库连接; connection
包含有用的方法,例如select_rows
:
a = connection.select_rows('select id from ...').map { |r| r[0].to_i }
如果您不在模型类中,那么您真的不应该直接搞乱数据库,但如果必须,可以使用ActiveRecord::Base.connection
。
答案 1 :(得分:0)
您可以在数据库中创建一个SQL视图,然后创建一个只读的ActiveRecord模型来从中读取数据。
那样:
请注意,某些视图可以写入,具体取决于View的SQL,DBMS,引擎等。但我建议不要这样做。