【问题标题】:Raw sql in ruby on rails return relationruby on rails中的原始sql返回关系
【发布时间】:2014-09-12 08:41:00
【问题描述】:

我想在 ruby​​ on rails 中使用原始 sql 来检索数据,以获得更快的响应。 我用

 @test1=ActiveRecord::Base.connection.execute("select Unique Id from device_tables")

然后我测试它使用p标签显示在视图中:

<p><%= @test1 %></p>

但不是给我数据,而是显示一个关系:

#<Mysql2::Result:0x00000008664948>

我想获取数据库的内容,将所有唯一的 id 存储在一个数组中。

【问题讨论】:

    标签: sql ruby-on-rails


    【解决方案1】:

    您应该使用eachmap 对其进行迭代,以查看结果。您当前的对象如下所示:

    #<Mysql2::Result:0xcd3dfe0 @query_options={:as=>:array, :async=>false, :cast_booleans=>false, :symbolize_keys=>false, :database_timezone=>:utc, :application_timezone=>nil, :cache_rows=>true, :connect_flags=>-2147442171, :cast=>true, :default_file=>nil, :default_group=>nil, :adapter=>"mysql2", :database=>"GetTravelTime_Development", :host=>"localhost", :pool=>5, :username=>"root", :password=>nil, :timeout=>5000, :flags=>2}> 
    

    我已经在控制台上尝试过这样的单个和多个对象:

    mysql_object = ActiveRecord::Base.connection.execute("select Unique Id from device_tables")
    mysql_object.each{|object| puts object}
    mysql_object.map{|object| puts object}
    

    【讨论】:

    • 我试过你的方法,但它仍然返回一个关系,但内容发生了变化,对于 .each 它返回 #<:result:0x00000005f533b8>,对于 .map 它返回 #<:result :0x0000000834f000>
    【解决方案2】:

    你可以试试 find_by_sql 方法。例如:

    TableName.find_by_sql"select * from table_names"

    【讨论】:

    • 这返回 [#, #, #, #],我怎样才能摆脱列名和唯一数据
    • 这会返回一个 NoiseDevise 对象数组,而不是一个 ActiveRecord 关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多