Abd*_*bdo 39 activerecord ruby-on-rails
有没有办法用ActiveRecord获取实际的列名?
当我使用连接调用find_by_sql或select_all时,如果存在具有相同名称的列,则第一个被覆盖:
select locations.*, s3_images.* from locations left join s3_images on s3_images.imageable_id = locations.id and s3_images.imageable_type = 'Location' limit 1
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我得到以下内容:
#<Location id: 22, name: ...
>
Run Code Online (Sandbox Code Playgroud)
其中id是最后一个s3_image的id.select_rows是唯一按预期工作的东西:
Model.connection.select_rows("SELECT id,name FROM users") => [["1","amy"],["2","bob"],["3","cam"]]
Run Code Online (Sandbox Code Playgroud)
我需要获取上面行的字段名称.这篇文章接近我想要的但看起来过时了(fetch_fields似乎不再存在你如何获得ActiveRecord查询结果中的行和列?)
ActiveRecord连接方法创建多个对象.我正在尝试实现相同的结果"包含"将返回但是使用左连接.
我试图返回大量的结果(有时整个表格),这就是为什么包含不适合我的需要.
The*_*Guy 67
AR提供了#column_names
一种返回列名数组的方法
the*_*tto 13
两种选择
Model.column_names
Run Code Online (Sandbox Code Playgroud)
要么
Model.columns.map(&:name)
Run Code Online (Sandbox Code Playgroud)
名为Rabbit的示例模型,列名为age,on_facebook
Rabbit.column_names
Rabbit.columns.map(&:name)
Run Code Online (Sandbox Code Playgroud)
回报
["id", "name", "age", "on_facebook", "created_at", "updated_at"]
Run Code Online (Sandbox Code Playgroud)
这就是活动记录的检查方法的工作方式:它只列出模型表中的列。属性还是有的
record.blah
Run Code Online (Sandbox Code Playgroud)
将返回 blah 属性,即使它来自另一个表。你也可以使用
record.attributes
Run Code Online (Sandbox Code Playgroud)
获取所有属性的哈希值。
但是,如果您有多个具有相同名称的列(例如,两个表都有一个 id 列),那么活动记录只会将内容混合在一起,而忽略表名。您必须为列名添加别名以使它们唯一。
归档时间: |
|
查看次数: |
39753 次 |
最近记录: |