从rails console里面我能够很容易地和理智得到使用ActiveRecordORM:第一项的风格的零售价格:使用导轨控制台SQL查询字符串学习SQL
[25] pry(main)> Item.first.style.retail_price
Item Load (0.2ms) SELECT "items".* FROM "items" ORDER BY "items"."id" ASC LIMIT 1
Style Load (0.1ms) SELECT "styles".* FROM "styles" WHERE "styles"."id" = ? LIMIT 1 [["id", 1]]
=> #<BigDecimal:7fe7a6bc7678,'0.6E2',9(27)>
我another post读了我可以使用ActiveRecord::Base.connection.execute
来运行原始的sql命令。我预料之中,因为Item.first.style.retail_price.to_s #=> "60.0"
取而代之的是我得到某种阵列的内部具有散列得到的东西看起来有点像'60 0.0' 背:
[26] pry(main)> ActiveRecord::Base.connection.execute('SELECT "items".* FROM "items" ORDER BY "items"."id" ASC LIMIT 1; SELECT "styles".* FROM "styles" WHERE "styles"."id" = ? LIMIT 1 [["id", 1]]')
(0.2ms) SELECT "items".* FROM "items" ORDER BY "items"."id" ASC LIMIT 1; SELECT "styles".* FROM "styles" WHERE "styles"."id" = ? LIMIT 1 [["id", 1]]
=> [{"id"=>1, "size"=>"M", "color"=>"Purple", "status"=>"sellable", "price_sold"=>nil, "sold_at"=>nil, "style_id"=>1, "created_at"=>"2017-02-04 04:47:09.415828", "updated_at"=>"2017-02-04 04:47:09.415828", "clearance_batch_id"=>nil, 0=>1, 1=>"M", 2=>"Purple", 3=>"sellable", 4=>nil, 5=>nil, 6=>1, 7=>"2017-02-04 04:47:09.415828", 8=>"2017-02-04 04:47:09.415828", 9=>nil}]
而且当我尝试相同的查询字符串rails db
我出现语法错误:
rails db
SQLite version 3.14.0 2016-07-26 15:17:14
Enter ".help" for usage hints.
sqlite> SELECT "items".* FROM "items" ORDER BY "items"."id" ASC LIMIT 1; SELECT "styles".* FROM "styles" WHERE "styles"."id" = ? LIMIT 1 [["id", 1]];
1|M|Purple|sellable|||1|2017-02-04 04:47:09.415828|2017-02-04 04:47:09.415828|
Error: near "[["id", 1]": syntax error
sqlite>
3个问题:
- 什么串并
ActiveRecord::Base.connection.execute
需要返回期望的结果,看起来像60.0? rails db
需要什么字符串?- 如何将
rails console
给我的sql字符串转换为可与ActiveRecord::Base.connection.execute
和rails db
一起使用的原始sql查询字符串的一般模式是什么?