質問するログイン新規登録

質問編集履歴

2

追記

2018/05/27 03:07

投稿

dwayne_johnson
dwayne_johnson

スコア86

title CHANGED
File without changes
body CHANGED
@@ -18,4 +18,11 @@
18
18
 
19
19
  なぜでしょうか?しばらく試行錯誤したのですが、わかりませんでした。。
20
20
 
21
- order の引数に直接文字列を入れると、もちろん動きます。ですので、これはrailsやmodelの問題ではなく、SQL文の書き方に問題があると思われますが、まだあまりSQL文の書き方を分かっておらず、困っています。よろしくお願いします。
21
+ order の引数に直接文字列を入れると、もちろん動きます。ですので、これはrailsやmodelの問題ではなく、SQL文の書き方に問題があると思われますが、まだあまりSQL文の書き方を分かっておらず、困っています。よろしくお願いします。
22
+
23
+ -- 追記 --
24
+ r1 の部分を、無理やりSQL文内部で展開すると、動きます。
25
+ ```
26
+ a = Station.select("stations.*").where("st_dwithin(location, ?, 5000)", r1).order("st_distance(location, '#{r1}')").first
27
+ ```
28
+ しかしこれだと、SQLインジェクション?の問題が起こると思われるので、望ましくありません。

1

見やすく

2018/05/27 03:07

投稿

dwayne_johnson
dwayne_johnson

スコア86

title CHANGED
File without changes
body CHANGED
@@ -10,7 +10,9 @@
10
10
  ```
11
11
  これを実行すると
12
12
  ```
13
- Station Load (0.9ms) SELECT stations.* FROM "stations" WHERE (st_dwithin(location, 'POINT (139.6479183406 35.5253746419)', 5000)) ORDER BY st_distance(location, ?, 5000), POINT (139.6479183406 35.5253746419) LIMIT $1
13
+ Station Load (0.9ms) SELECT stations.* FROM "stations"
14
+ WHERE (st_dwithin(location, 'POINT (139.6479183406 35.5253746419)', 5000))
15
+ ORDER BY st_distance(location, ?, 5000), POINT (139.6479183406 35.5253746419) LIMIT $1
14
16
  ```
15
17
  となり、`ORDER BY st_distance(location, ?, 5000)`の箇所の`?`に、適切に代入されていないことがわかる。
16
18