使用ActiveRecord内部的ORM rails console,我可以轻松而合理地获得:第一件商品的款式零售价:
[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命令。我应该得到类似“ 60.0”的东西,因为Item.first.style.retail_price.to_s #=> "60.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查询字符串的一般模式是什么?
最佳答案
如果只想从一个区域中选择一个字段,则必须在SQL的select
子句中指定它。像这样
SELECT styles.retail_price FROM styles WHERE styles.id = 1
在这种情况下,如果使用rails的
retail_price
方法,则只能获取execute
数组中的内容。如果只需要单个值,请使用select_value
方法,而不要使用execute
。喜欢ActiveRecord::Base.connection.select_value("SELECT styles.retail_price FROM styles WHERE styles.id = 1")
由于此
[["id", 1]]
,在sqlite3终端中您将获得语法错误。这是用于准备好的语句的rails / applicative-level东西,但不是有效的SQL。您应该像我一样替换ID。
关于sql - 使用Rails Console SQL查询字符串学习SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058773/