【发布时间】:2015-08-09 22:00:55
【问题描述】:
我创建了一个在数据库中没有对应表的 ActiveRecord 模型。我希望它管理应用程序“范围”查询:
class Meter <ActiveRecord::Base
def self.daily_tests
self.connection.execute(sanitize_sql(["SELECT b.*, m.*, i.* FROM bgtests AS b JOIN meals AS m ON b.user_id = m.user_id JOIN injections AS i ON i.user_id = m.user_id WHERE b.user_id = 2 AND m.user_id = 2 AND i.user_id = 2"]))
end
end
查询执行,但结果集返回:
{"id"=>1, "value"=>712, "category"=>"basal", "time_of_day"=>"Before dinner", "comments"=>"Est et aut. Est maxime sunt. Dolor doloribus distinctio sed reprehenderit culpa. Autem ipsam atque modi dolor ut non. Aut dicta voluptate occaecati.", "user_id"=>2, "created_at"=>"2015-06-21 18:58:55.806367", "updated_at"=>"2015-06-21 18:58:55.806367", "name"=>"snack", "carbohydrates"=>142, "description"=>"Facere reiciendis non officia velit consequatur voluptas eum. Veritatis quia cumque. Dolor non eaque quod. Dignissimos quae aut eveniet sunt ea amet. Iste et aut unde consequatur quia commodi.", "num_of_units_taken"=>1.0, 0=>10, 1=>712, 2=>"smbg", 3=>"Before dinner", 4=>"Est et aut. Est maxime sunt. Dolor doloribus distinctio sed reprehenderit culpa. Autem ipsam atque modi dolor ut non. Aut dicta voluptate occaecati.", 5=>2, 6=>"2015-06-21 18:58:55.595625", 7=>"2015-06-21 18:58:55.595625", 8=>12, 9=>"snack", 10=>142, 11=>"Facere reiciendis non officia velit consequatur voluptas eum. Veritatis quia cumque. Dolor non eaque quod. Dignissimos quae aut eveniet sunt ea amet. Iste et aut unde consequatur quia commodi.", 12=>2, 13=>"2015-06-21 18:58:56.115615", 14=>"2015-06-21 18:58:56.115615", 15=>1, 16=>1.0, 17=>"basal", 18=>2, 19=>"2015-06-21 18:58:55.806367", 20=>"2015-06-21 18:58:55.806367"},
初始键值作为列值返回,但随后会切换并添加后续记录,例如 5=>2。
我的问题是如何在 foreign_key 'user_id' 上查询这些多个模型,并让结果集以特定于模型的典型对象表示法返回所有结果?
【问题讨论】:
-
你能用你使用的数据库来标记吗?还有,为什么要这样查询呢?您可以在 AR 中编写此查询...
-
我无法重现 Rails 4.1 + PostgreSQL 的问题。您是否在不同的表上有同名的列?
-
我更喜欢使用 AR。我在三个表中都有一个 user_id 列。
标签: sql ruby-on-rails ruby activerecord