【问题标题】:Selecting Fields From Multiple Tables从多个表中选择字段
【发布时间】:2013-09-20 01:10:23
【问题描述】:

除了使用execute方法之外,还有其他方法可以在rails中编写此查询吗?

connection.execute("select value_1, value_2, value_3 from table1 join table2 on table2.table1_id = table1.id where table2.table3_id = table3_id_value")

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    如果您遵从 Rails 命名复数和大写的约定,会容易得多。

    那么如果 table1 真的是 foos 而 table2 是 bars 对应于 Active Record FooBar,声明,你会想要的

    belongs_to :foo
    

    Bar 记录中。这对应于外键foo_id。然后添加匹配

    has_many :bars
    

    Foo 记录中。这允许检索引用foofoo.bars 的所有bars 记录。有了这一切,查询将是

    Foo.join(:bar).select(:value_1, :value_2, :value_3)
       .where('bars.table3_id = ?, table3_id_value)
    

    可以覆盖表和外键名称的默认约定。在the Active Record query documentation 中查找正确的选项。

    【讨论】:

    • 感谢您的提示!所以我只是对您的建议进行了稍微修改的版本(必须在选择值周围添加括号,并在 'bar' 中添加一个 's'),并且只返回了三个选择值中的两个(三个中的一个不是来自 Foo)。有什么想法吗?
    • Active Record 加入接口不允许访问加入记录的字段。您必须使用较低级别的调用之一。
    猜你喜欢
    • 2015-08-24
    • 2010-11-15
    • 1970-01-01
    • 2021-11-28
    • 2011-01-21
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多