問題タブ [acts-as-tree]

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.

0 投票する
2 に答える
1017 参照

ruby-on-rails - act_as_tree はモデルの子を破棄しません

私はこのタスクモデルを持っています:

そして、私はこのテストを持っています

テストは成功です。d1 を破棄すると、d1 のすべての子孫が破棄されます。したがって、破棄後はルートのみが残ります。

ただし、タスクに before_save コールバックを追加した後、このテストは失敗しています。これは私がタスクに追加したコードです:

このコードを追加すると、assert_equal 1, Task.count失敗し、Task.count == 4. ブロックをコメントアウトすると、テストが再びパスするため、self.children下が原因だと思います。handled_parent_id_changeself.children.each do |sub_task|

何か案は?

0 投票する
4 に答える
7372 参照

ruby-on-rails - RailsのRedditスタイルのネスト/スレッド/インデントされたコメント?

Rails でスレッド化されたコメント用のシステムを (より適切な用語がないため) 誰かが既に構築したのか、それとも自分で構築する必要があるのか​​疑問に思っています。

明確でない場合、私が言及しているのは Reddit のようなコメント システムであり、返信が木の枝のように見えるように自動的にインデントされます (Reddit と同じように投票することが望ましい)。

誰かがこれを行うコードを教えてくれたら、大歓迎です。

あるいは、この機能を含むオープン ソース プロジェクトがあるかもしれません。

これまでのところ、Rails で見つけることができませんでした。

また、Rails フォーラムでこれを質問した方がよいでしょうか?もしそうなら、どのフォーラムですか? (私はRailsが初めてです)

0 投票する
3 に答える
841 参照

ruby-on-rails - 配列に基づいてファイル リストを生成する

私はいくつかのことを試しましたが、今週は私の脳が休日を過ごしているように感じ、これを完了する必要があります..誰かが私を助けてくれることを願っています.

データベースに保存されているハッシュに基づいてファイルリストを作成する必要があります。has は次のようになります。

出力は次のようになります。

  • ファイル1
  • dir1
    • ファイル2
    • サブディレクトリ1
      • ファイル3

htmlでは、できればこのように(jsで折りたたみと複数選択に拡張するため)

私は Ruby on Rails を使用しており、RJS テンプレートでこれを達成しようとしています。しかし、これは実際には問題ではありません。また、詳細な疑似コードについても教えてください。

誰かがこれを解決する方法を知っていますか?


編集

これらのソリューションを提供してくれた皆さんに感謝します。リストは機能します。ディレクトリの内容を表示/非表示にする折りたたみ式ソリューションに拡張しました。まだ問題が 1 つあります。コードは、同期用のエントリの背後にあるチェックボックスに完全なファイル パスを設定することを目的としています。sris のソリューションに基づいて、現在のファイルとそのサブのみを読み取ることができますが、ルートからのパス全体を読み取ることはできません。理解を深めるために:

現在:

私にくれます

テキストが表示されるのと同じ値のチェックボックス (例: [x] file1 の場合は "file1")。しかし、必要なのはフル パスです。たとえば、[x] file1 の場合は "dir1/dir2/file1" です。

誰かがこれを追加する方法について別のヒントを持っていますか?

0 投票する
1 に答える
244 参照

ruby-on-rails - データベースにコミットする前に ActiveRecord の関連付けは有効ですか?

act-as-tree を使用するモデルがあります。例えば:

ツリーには次の関連付けがあります。

スクリプト/コンソールからツリーを構築しています。ツリー全体が構築されるまで何も保存しません。私が抱えている問題は、データベースにコミットする前に、ツリーをうまくナビゲートできないことです。#parent と #sibling を呼び出すと、疑わしい結果が生成されます。何かが欠けているとしか思えません。

これは、関連付けの処理方法と関係があると思います。インメモリ ActiveRecord 構造は完全にナビゲートできると想像していましたが、そうではないようです。コンソールへのロギングを強制することから、アソシエーション間をナビゲートするとデータベース アクセスが発生することに気付いたことがあります。これにより、アソシエーションを迂回する方法を知ることが難しくなります。(クエリのキャッシングについて簡単に調べました。) 他の人はこれをどのように処理していますか? それとも、常にレコードとその関係をコミットしていますか? これは不可解です。


編集:

この問題を解決すると思われるのは、両方の関係を同時に設定することです。つまり、欠けていたのは次の部分でした。

これは設計によるものですか?つまり、相互関係の両方の部分を設定することが常に期待されているのでしょうか?


編集:

関連する質問

0 投票する
2 に答える
1269 参照

ruby-on-rails - 熱心な読み込みをサポートするようにacts_as_treeを作成できますか?

act_as_tree を使用して、完全な子階層を持つツリー全体を 1 回の SQL 呼び出しでプリロードできるようにしたいと考えています。そのために、tree_id をテーブルに追加し、そのツリー内のすべての子孫を通過します。

可能性としてacts_as_nested_set(実際にはawesome_nested_set)を調査しましたが、ツリーを他のツリーに移植したため、ネストされたセットを目的に使用すると更新が多すぎることがわかりました。act_as_versioned とともに、これは私が求めている設計にとって容認できない複雑さです。私の目的には、acts_as_tree の方が適していると思います。

私の唯一の問題は、階層をそのままにしてツリー全体を取得することです。ActiveRecord の :include オプションは、:children では機能しますが、:descendants では機能しません。アソシエーションを手動で取得してマッピングするための独自のメソッドを作成することに満足しています。これを達成するためのガイダンスや例はありますか?

私の見解では、ツリー (構造化されたツリー全体の取得をサポートするもの) を使用するために脇に置いているネストされたセットの唯一の利点は、ツリーの任意のサブセクションを選択的に取得できることです。私はそれで大丈夫です。

私が回避したい解決策は、ツリーに付随する :children 関連付けを排除し、各ツリーノードで定義された子配列を定義して手動でロードすることです。

0 投票する
3 に答える
866 参照

ruby-on-rails - Acts_as_tree - 一対多: 親ページに子に関連付けられたレコードを表示

私は比較的単純な 1 対多の関係を持っており、acts_as_tree を使用してビューで整理しています。次のようになります。

設定方法は、カテゴリの「表示」アクションに製品をリストすることです。ただし、表示方法がよくわからないようです: カテゴリ 1 の「表示」の製品 1-5、カテゴリ 1.1 の製品 3-5 など.​​..

どこから拾うことができるか、誰かがヒントを持っていますか?

ありがとう!ヴァル

0 投票する
1 に答える
333 参照

ruby-on-rails - Acts_as_treeでファイルシステムのようなルートを作成することは可能ですか?

私はFolderモデルを持っていacts_as_treeます。

ルートがフォルダ構造を表す可能性はありますか?

フォルダー:

ルート:

これは可能ですか?

0 投票する
2 に答える
1887 参照

ruby-on-rails - 複数のモデルを持つツリーとして機能します

階層的に関連付けたいモデルがいくつかあります。簡単にするために、私がこれらの3つを持っているとしましょう:

現在のacts_as_treeでは、同じタイプであれば、各ノードを個別に他のノードに階層的に関連付けることができます。私が望むのは、タイプIDに関するこの制限を削除して、SomePost.parentがその親としてUserまたはPostを持つことができ、SomeUser.parentがその親として別のユーザーまたはグループを持つことができるようにすることです。

何かご意見は?

0 投票する
3 に答える
9640 参照

ruby-on-rails - グループ化による整形的な選択

Formtastic を使用すると、単純な選択ができます。

ここでは、子供のカテゴリのみを表示します。親子関係にはacts_as_treeプラグインを使用しています。親カテゴリも表示したいと思います。

Formtastic で生成された選択は次のようになります。

acts_as_tree機能を備えたモデルのFormtastic selectでグループ化を使用するには? 誰か知っていますか?

更新しました

私はこれがうまくいくはずだと考えました:

しかし、それはエラーではありません:

Formtastic にバグがあるようです。formtastic.rb を調べたところ、 detect_group_associationメソッドで object_class が見つかりました。

実際、このメソッドではobject_class が定義されておらず、formtastic.rb にはその名前のプライベート メソッドはありません。しかし、関連付けを明示的に定義するために:group_associationを使用できます。

しかし、私は別のエラーに遭遇しました:

私はActs_as_treeをオフにして、自分自身の自己参照関連を書いてみました。Acts_as_tree と同じ動作は次のようになります。

エラーは同じです。誰でも助けることができますか?

更新しました

次の小さなステップ。Formtastic を使用しないこのコードは正常に動作します。

ps: top_categories は、親カテゴリのコレクションを持つヘルパー メソッドです。

最後に、それを Formtastic 構文に変換します:)

0 投票する
1 に答える
476 参照

ruby-on-rails - Acts_as_treeを使用した完全修飾ツリーのto_xml

私はacts_as_treeを使用するActiveRecordクラスを持っています。to_xmlメソッドを更新して、子レコードのto_xmlが呼び出された場合に、親/祖先xmlにネストされたxmlを返し、そのリソースへの完全修飾パスを提供するようにしようとしています。例として、Compiler/Versionの親であるCompilerがあります。コンパイラはxmlとしてレンダリングする必要があります。

コンパイラ/バージョンは次のようにレンダリングする必要がありますが

full_qualifiedフラグを渡すことでこれを実行しようとしましたが、「Builder :: XmlMarkup#to_aryはArrayを返す必要があります」で終了します。

def to_xml(options = {}、&block)options [:fully_qualified] || = true options [:indent] || = 2 options [:builder] || = Builder :: XmlMarkup.new(:indent => options [:インデント])

55:parent.to_xml(options)do | foo | Relative_options = options.dup Relative_options [:fully_qualfied] = false Relative_options [:skip_instruct] = true relative_options.delete(:builder)

66:xml.parameter(:name => name、&block)end end

このメソッドは、コンパイラの場合は正常に機能しますが、コンパイラ/バージョンの場合は失敗します。

/usr/lib/ruby/1.8/builder/xmlbase.rb:133:in method_missing' /usr/lib/ruby/1.8/builder/xmlbase.rb:133:incall' _nested_structures' /usr/lib/ruby/1.8/builder/xmlbase.rb:57:in/usr/lib/ruby/1.8/builder/xmlbase.rb:133:in method_missing' app / models / parameter.rb:66:to_xml' app/models/parameter.rb:55:into_xmlで'