我是這個人,呃...這個很尷尬... 責怪這個問題。 neo4j-will_paginate
寶石很快適應了Neo4jrb 3.0,因此,我一直在根據需要修補它,因爲它將它放在那裏。
無論如何,這有兩個原因是失敗的,它們都不是你的錯。我只是修補了Neo4j和neo4j-will_paginate寶石來解決這個問題。我添加了一個order
選項,如您在上次嘗試中所演示的那樣,但您需要使用符號,散列或帶有標識符的字符串。其中的一個:
@things = Thing.all.paginate(:page => params[:page], :per_page => 2, :order => :title)
@things = Thing.all.paginate(:page => params[:page], :per_page => 2, :order => { title: :desc })
@things = Thing.as(:t).paginate(:page => params[:page], :per_page => 2, :order => 't.title DESC')
,直到我們做一個新的釋放neo4j
,所以在此期間,無論是在每個回購的主分支指向您的Gemfile或裁判的注意,我不能做的neo4j-will_paginate
新版本提交。
gem 'neo4j', github: 'neo4jrb/neo4j', branch: 'master',
gem 'neo4j-will_paginate', github: 'neo4jrb/neo4j-will_paginate', branch: 'master'
#or
gem 'neo4j', github: 'neo4jrb/neo4j', ref: 'b4ee152becb827d87a7659d1beebfb043d0560f6'
gem 'neo4j-will_paginate', github: 'neo4jrb/neo4j-will_paginate', ref: 'b85b622087f3929c37231570f4d24021dcff4ee0'
我們爲Neo4j保留一個完全通過的主分支。
在將它直接固定在寶石中之前,我找出了問題的原因以及一個糟糕的解決方法並將其輸入。我將在這裏列出它,因爲它揭示了一些關於爲什麼會發生這種情況的信息,以及如何在Cypher DSL彈出時解決Cypher DSL的解決方法侷限性。最終,您在paginate
中提出order
選項的建議讓我瞭解如何正確處理它。
不必要的解決方法:
Thing.as(:t).where('true = true WITH t ORDER BY t.name desc').paginate(:page => params[:page], :per_page => 2)
在Cypher支架,這產生兩個疑問:
MATCH (t:`Thing`) WHERE true = true WITH t ORDER BY t.name desc RETURN count(DISTINCT t) AS t
MATCH (t:`Thing`) WHERE true = true WITH t ORDER BY t.name desc RETURN t SKIP 0 LIMIT 10
務必注意的事實是,我們正在設置與標識as
就在開頭。只要你在where
方法中使用相同的東西,你可以設置任何你想要的。
所有必要的原因是因爲will_paginate
計算出要顯示的頁面總數。當您撥打paginate
時,您的查詢已調用count
,正如您在第一次Cypher聲明中看到的那樣。現在,count
錯誤已得到修復(編輯這個被列入前奏部分,在這裏我提到的修復導致您的特定錯誤的錯誤,但不是問題作爲一個整體),看起來像這樣:
MATCH (result:`Thing`) RETURN count(result) AS result ORDER BY result.name, result.desc
# results in error:
# Neo4j::Session::CypherError: Type mismatch: expected Map, Node or Relationship but was Integer (line 1, column 66)
查詢和訂單明確了問題所在:您無法訂購整數。 WITH
來救援! WITH
基本上將我們的單個查詢分成兩個單獨的查詢。通常必須被稱爲RETURN
的一部分的條款可以在那裏被調用。我們在那裏執行我們的訂單而不是最後,然後我們讓其餘部分按照通常的方式進行。
這是一個好主意,但這裏的問題是QueryProxy
是Neo4j::Core::Query
類的抽象,並且沒有with
方法。我們用那個廢話來解決這個問題。我們基本上使用針對服務器的Cypher注入攻擊。哎喲。
我想我可以通過修補寶石使用with
解決這個問題...
在這一點上,我意識到它到底是如何工作的,停止打字,並修補了寶石。結束。我在https://github.com/neo4jrb/neo4j/issues/540上創建了一個問題,所以如果您遇到任何問題,請隨時發表評論。
非常感謝您爲寶石修補!新的訂單選項完美地工作:) 我從'current_user'和devise-neo4j的其他方法,特別是'錯誤的參數數量(1爲0)'的錯誤。如果需要,我會嘗試深入挖掘並在github頁面上發佈。 – 50psi 2014-11-01 05:07:08