我想獲得一個非常簡單的聲明工作。Rails sql問題與簡單的語句
Node.where("nodeid = ?", nstart).select('id')
結果
Parameters: {"utf8"=>"✓", "authenticity_token"=>"WpSpzLzaFUx8QgFbwEfygQUkkqvbUgZl8Hh0UxJvT8E=", "edge"=>{"kind"=>"IsA", "start_id"=>"blabla", "end_id"=>"bliblib", "property1"=>"bloblbo"}, "commit"=>"Create Edge"}
(0.0ms) begin transaction
Node Load (0.1ms) SELECT "nodes".* FROM "nodes" WHERE "nodes"."id" = ? LIMIT 1 [["id", 0]]
CACHE (0.0ms) SELECT "nodes".* FROM "nodes" WHERE "nodes"."id" = ? LIMIT 1 [["id", 0]]
(0.0ms) rollback transaction
它應該是從節點其中nodeid = blabla'限不要緊只是'select nodes.id。
但是,如果我添加.first。
Node.where("nodeid = ?", nstart).select('id').first
我得到
Parameters: {"utf8"=>"✓", "authenticity_token"=>"WpSpzLzaFUx8QgFbwEfygQUkkqvbUgZl8Hh0UxJvT8E=", "edge"=>{"kind"=>"IsA", "start_id"=>"blabla", "end_id"=>"bliblib", "property1"=>"bloblbo"}, "commit"=>"Create Edge"}
Node Load (0.1ms) SELECT "nodes"."id" FROM "nodes" WHERE (nodeid = 'blabla') ORDER BY "nodes"."id" ASC LIMIT 1
Node Load (0.1ms) SELECT "nodes"."id" FROM "nodes" WHERE (nodeid = 'bliblib') ORDER BY "nodes"."id" ASC LIMIT 1
(0.0ms) begin transaction
Node Load (0.1ms) SELECT "nodes".* FROM "nodes" WHERE "nodes"."id" = ? LIMIT 1 [["id", 0]]
CACHE (0.0ms) SELECT "nodes".* FROM "nodes" WHERE "nodes"."id" = ? LIMIT 1 [["id", 0]]
(0.1ms) rollback transaction
的第一選擇,現在是應該的,但跟進再像以前那樣,似乎確定最終的返回值(因爲它不工作,要麼) 。我只想知道id,當我只知道基本上是節點名稱的nodeid時。
Rails在這裏發生了什麼?
我真的懷疑第一個輸出,我想你給了錯誤的輸出,我沒有看到與代碼'Node.where(「nodeid =?」,nstart).select('id')' – 2014-09-06 13:43:31
有任何關係。我三重檢查。它一定是一些緩存問題。我嘗試每次更改值並重新啓動服務器。現在我用第一個解決方案得到正確的結果,但它返回一個Node對象。我似乎也需要第一個。 – samst 2014-09-06 15:02:37