問題タブ [neo4j.rb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Neo4j gem - 特定の関係のクエリ
ノードとリレーションシップのパターンを取得したり、リレーションシップ プロパティに基づいてリレーションシップ自体を検索したりする方法は多数あります (たとえばEnrolledIn.where(since: 2002)
、ノードの特定のプロパティに基づいてリレーションシップを取得する最善の方法は何でしょうか。たとえば、
現在のユーザー -[:関係]->イベント
私はイベント ID を知っているので、最も論理的な方法は、検索されるプロパティの 1 つとして event.id を使用してパターンをクエリすることです。私は今このようなものを持っています
event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)
上記は機能せず、配列を返します
ruby-on-rails - Neo4j gem - 管理者関係を処理するための推奨される方法
これは主に設計/効率の問題ですが、SQL db で行う方法とは対照的に、neo4j でこれを処理するための好ましい方法があるかどうかを確認したかったのです。
現在、私は 2 つのモデルを持っています -user
とevent
. 私は と の間にも関係がuser
ありevent
、彼らがイベントに参加することを表明しています。イベントの管理者を代表する最善の方法を見つけたいです。つまり、ユーザーが管理するイベントを照会できるようにしたいと考えています。
admin_of
これを行う 1 つの方法は、ユーザーと の間に新しい関係を作成することですevent
。もう 1 つの方法は、出席関係の管理プロパティを作成することです。何かのようなものadmin: true
クエリは簡単にadmin_of
見えますが、データベースに別の関係を追加します。後で複数の管理者を処理することもできます。
後者の方法は、次のような方法でクエリを実行できると思います: (ドキュメントから)EnrolledIn.where(since: 2002)
したがって、検索にはadmin: true
. ただし、友達のイベントだけにしたいので、これを連鎖させる方法がわかりません。他のwhere
クエリは通常、関係ではなくノードに基づいてプロパティを設定します。
後者の方法はそれを行うための好ましい方法のようですが、それを照会する正しい方法は何でしょうか? それとも、追加の関係を追加しても、最初の方法の方が簡単ですか?
更新: 私はこのようなものを思いついた
result = Event.query_as(:event).match("event<-[invite: INVITED]-(user: User)<-[:FRIENDS_WITH]-(user)").where(invite: {admin: /true/}).pluck(:event)
の詳細なクエリに基づいて
https://github.com/neo4jrb/neo4j/wiki/Search-and-Match
更新 2
私は今これを持っていますが、一致しません。クエリの何が問題なのかを分析する最良の方法は何ですか?
current_user.friends.events.query_as(:event).match("event<-[invite]-(user: User)<-[friends_with]-(user)").where(invite: {admin: true}, event: {detail: 'property'}).pluck(:event)
私のユーザーモデルは
has_many :both, :events, model_class: 'Event', rel_class: 'Invite'
そして私のイベントモデルは
has_many :both, :users, model_class: 'User', rel_class: 'Invite'
私の招待モデルは
ruby-on-rails - Neo4j gem - 配列オブジェクトからのクエリ
前の例では、このクエリがありました
current_user.friends.events(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)
current_user.friends.events
チェーンを継続するためにイベントを表示しますが、イベントの配列を含むオブジェクトが既にある場合、これは機能しますか?
私の例では、ジオコーダーを使用して接近しようとしています。
したがって、ジオコーディングされたユーザーとイベントがあります。
ジオコーダーはこのようなことを行うことができます
Venue.near([40.71, 100.23], 20)
# 20 マイル以内にあるすべてのオブジェクトを見つける
したがって、基本的にすべてのイベントを見つけて、オブジェクトに格納できます。neo4j クエリを使用してそのオブジェクトをフィルタリングできますか?
例えば
array_object(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)
これが機能する場合でも、これを行う別の方法はありますか?
ruby-on-rails - Facebook Omniauth: この認証コードは期限切れです
RailsでのFacebookログインのコールバックで最初にこのエラーが発生しました。残りは覚えていませんが、その後は再現できません。
同じログイン試行を行うと、エラーが発生するようになりました
if user = User.find_from_omniauth(env["omniauth.auth"])
これはエラーを発生させます
User.where(auth.slice(:provider, :uid)).limit(1).first
それは単に言う
Node with id 133354
とNeo4j::Session::CypherError in SessionsController#create
http://railscasts.com/episodes/360-facebook-authenticationに基づいたクライアント側認証のコードを次に示します。
どこからデバッグを開始すればよいかよくわかりませんか?
更新: アクセスすらできないようですhttp://localhost:7474/browser/
すべてのノードをプルアップしようとすると、「不明なエラー」が表示されます。最初のエラーがデータベースに大混乱をもたらしました??
ruby-on-rails - Neo4j gem - パラメータ値に依存するクエリ
これはレールほどneo4jではないかもしれません。でも多分私は間違っている
パラメータが特定の値である場合の状況を処理するための提案を探しています。例えば。私のクエリでは
イベントにはsize_max
、整数または のプロパティがありますany
。今、私はany
空白の値を持っています。基本的に、いずれかを選択した場合、クエリでそのパラメーターをすべて無視する (または同様の方法で処理する) 必要があります。それをごまかす方法は、外部の状況を処理することです。いずれかが選択され、値が空白の場合、ヒットしない非常に高い数値に手動で設定します。
現在、奇妙なハッキーな方法を使用せずに、クエリの内外でこれを行う方法がわかりません。提案?
アップデート
あなたが提案したように私の質問があります。および「検証」を処理する方法
そして、size_param
気に入らない空白に変更しました。両方のケースを処理できるようにしたかったのです。たとえば、最初にページにアクセスしたときのパラメータは空で、送信すると空白になります。Nil はシナリオ 1 では機能しますが、シナリオ 2 では機能しません。||
ケースは必要ですか?
そして私の見解では、
<% if !@friends_events.blank? %>
私のエラーは
Don't know how to compare that. Left: 0 (Long); Right: false (Boolean)
私の見解では上の行から。に変更.blank?
すると.nil?
、フィルターが通過できるようになります (ただし、正しくありません)。