轨。如何按列名显示数据

时间:2014-06-16 16:02:44

标签: sql ruby-on-rails activerecord

我使用Rails 4。 我使用结构

@users  =  ActiveRecord::Base.connection.execute("SELECT * FROM users")

@users.each do |row| %> 

  puts user[0] # id--> 1,2,3,4,5,6 

end

@users.fields do |field| %> 

  puts field.name # --> id, login, password.....

end

如何按列名显示数据? 例如

@users.first.field['id']

1 个答案:

答案 0 :(得分:0)

ActiveRecord::Base.connection.execute(将运行sql但不返回任何内容(或更准确地返回nil)。要将记录加载到内存中

@users = User.all

你不能很好地描述你想要的东西。如果你真的想要" 1,2,3,4,5,6"你可以做到

@users.map(&:id).join(",")

例如,如果您想要一张表格,显示您可以执行的所有用户数据(在您的视图中)

<% cols = User.column_names %>
<table>
  <thead>
    <tr>
      <% cols.each do |col| %>
        <th><%= col %></th>
      <% end %>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <% cols.each do |col| %>
          <td><%= user.send(col) %></td>
        <% end %>
      </tr>
    <% end %>
  </tbody>
</table>

就像我说的,我不知道这是不是你真正想做的事情。你的要求非常混乱,非常模糊。

修改

如果要在不使用AR模型的情况下从数据库中加载数据,则可以执行

@users = ActiveRecord::Base.connection.select_all("select * from users")

这会给你一系列像这样的哈希

[{"id" => "1", "name" => "foo", "bar" => "baz"}, {"id" => "2", "name" => "chunky", "bar" => "bacon"}, .... ]

然后您可以像

那样访问
user = @users.first #you've got a hash now
aname = user["name"]