問題タブ [nested-resources]
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 - URLから親リソースを取得する
has_many関係を持つ2つのオブジェクト(@stacksと@stories)があります(@anthologiesを介して)。ストーリーは、個別に表示することも(/ stories / 1 /)、スタック内のコレクションとして表示することもできます(/ stacks / 1 / stories / 1 /)。
この基本的なフレームが機能しているので、ストーリーがスタックの一部としてレンダリングされるタイミングを特定して、ストーリー間のナビゲーションを構築できるようにしています。これを行う最も簡単な方法は、プライマリコントローラーのURLを確認することだと思いますが、1)これを行う方法がわかりません。また、2)より直接的な方法があるはずなので、非常に不安定なようです。
ここでも、Railsの基本のいくつかについて頭を悩ませています。目的の機能を実現するための推奨事項はありますか?
ruby-on-rails - ネストされたリソースでのRailsRESTful削除
さて、これがシナリオの例です。学生用リソースがあり、resources :students
学生は多くのコレクションを持っており、それらに属しています:resources :clubs
、resources :majors
など。
したがって、ルートを簡単に設定できます...
これにより、一連の標準的なRESTfulルートが生成されます
- / clubs
- / clubs /:id
- / clubs /:club_id / students
- / clubs /:club_id / student /:id
- /専攻
- / majors /:id
- / majors /:major_id / student
- / majors /:major_id / student /:id
- /学生
- / student /:id
- / student /:student_id / clubs
- / student /:student_id / clubs /:id
- / student /:student_id / majors
- / student /:student_id / majors /:id
これが私の質問です。RESTセマンティクスでは、学生の専攻をどのように削除しますか?専攻の下で学生を閲覧する/majors/:major_id/students/:id
と、特定の専攻の「コレクション」にその学生が表示されます。ただし、:idを削除するためのルートは、を指しStudentsController#destroy
ます。これにより、学生は完全に削除されます。おっと!ですから、逆に行って、リソースに対してDELETEを実行すると、/students/:student_id/majors/:id
UnderwaterBasketweavingはこの学校では提供されなくなります...おっと!
これで、ClubsController、MajorsController、StudentsControllerのdestroyメソッドを設定して、club_id、major_id、student_idを検索できますが、将来的には、FraternitiesやGraduatingClassesなどを追加したいとします。各クラスは次のようになります。どのパラメータが存在するかを確認するための巨大なスイッチ条件で構成されています...次に、最上位のリソースのコレクションを見つけて最下位のリソースを削除するか、またはその逆を行います。モデル自体は、関連付けレコードがなくなった場合に自分自身を削除するかどうかを決定する必要があります...そのリソースの「破棄」は実際には誤った名称になっています...
これを行う簡単な方法はありますか?人気のあるRESTfulRailsプラグインでさえ、Joe's Majorsから削除するときにUnderwaterBasketweavingを吹き飛ばしたり、主要なUnderwaterBasketweavingから削除するときにJohnDoeを完全に削除したりしますmake_resourceful
。resource_controller
セマンティクスの望ましい効果と「破棄」が何をすべきかを理解するために、関連付けを調べる可能性があるように思われます。
それではまた、私はこれをすべて間違って見ていますか?単一のリソースとしてのUnderwaterBasketweaving->JoeではなくUnderwaterBasketweaving+Joeであり、削除するのは本当にJoeでもUnderwaterBasketweavingでもありませんが、組み合わせを表すリソースですか?ただし、コントローラーが学生と専攻である場合、それは事実上同じ名前のリソースを表すので簡単ではありません(MVCは実際にはRVになりました...「従来の」アプローチでは、モデル名に関係のないコントローラーを開発していません、またはそれに到達するためのパス)したがって、専攻または学生を削除することになります。あなたの毒を選んでください...
削除がコレクションのコンテキストにあり、その特異性に関係しないことが望まれる場合、削除が実際には意図されていない、関連するリソースの無限のグラフ全体で条件を管理することを回避するにはどうすればよいですか?
... major.student.delete
...'学生'ActiveRecordオブジェクトが'メジャー'ARオブジェクトで始まるメソッドチェーンで'削除'メッセージが送信されたことを知る方法はありますか?
ruby-on-rails - ネストされたコントローラーの使用
私のサイトには管理セクションと通常の (フロントエンド ユーザー) セクションがあったため、RESTful になるように記事コントローラーを構成する必要がありました。
だから私がしたことは、2 つの記事コントローラーを用意することでした。(私はこのブログをフォローしました。)
今、私は次のような問題に直面し始めました
2つの質問。
- このエラーは、ネストされたリソースの構造を使用したことが原因でしょうか?
- そのような構造を使用することは良いプログラミングの実践ですか? そうでない場合、より良い代替手段はありますか?
ありがとう!
ruby-on-rails - 機能テストでのルートの問題
私は自分のテストの準備をするための簡単なテストプロジェクトを作成しています。私はネストされたリソースにかなり慣れていません。私の例では、ニュースアイテムがあり、各ニュースアイテムにはコメントがあります。
ルーティングは次のようになります。
現在、コメントの機能テストを設定していますが、いくつか問題が発生しました。
これにより、ニュースアイテムのコメントのインデックスが取得されます。@newsitemはcのセットアップで宣言されます。
しかし、問題はここ、「新しくなるべき」にあります。
次のエラーが発生します。
しかし、ルートテーブルを調べると、次のことがわかります。
名前パスやここで間違っていることを使用できませんか?
前もって感謝します。
ruby-on-rails-3 - ネストされたリソースで form_for を機能させる方法 - 少しひねりを加えて
親フォーム内ではなく、独自のフォームで子モデルを追加/編集したいと考えています。
私が見た例では、親と同じフォームに子が追加されています。別のフォームで追加/編集のひねりを加えているので、それが次のエラーが発生する理由かどうか疑問に思っています:
未定義のメソッド `chapters_path' ...
ルート.rb:
book.rb:
chapter.rb
_form.html.erb:
books/1/chapters/new のような URL で子を追加したいので、まだネスト リソースの方法論を使用する必要があると思います。または多分私はこれを間違った方法で見ています。
どんな助けでも大歓迎です。
ruby-on-rails - ポリモーフィックな関連付けとマルチレベルのネストされたリソース
Railscast 154に従って、コメントと多数の親リソースとのポリモーフィックな関連付けを設定しました。例えば
これは問題なく動作しますが、既にネストされているリソースのコメントも必要です。
これを実装するための最良の方法は何ですか?
ruby-on-rails-3 - Rails3-ネストされたリソースのルーティング-1対1の関係
ネストされたリソースのルーティングに問題があります。私がやろうとしているのは、編集目的でユーザーのプロファイルページにリンクすることです。私の見解では、それは次のように書かれています:
どのエラーが発生しますか:
私のroutes.rbファイルでは、次のようになっています。
私は自分のレーキルートをチェックしました、そしてそれは私にこれを有効なオプションとして与えました:
手動で移動できます。適切な対策として、これが私のコントローラーの証明です。
とにかく、私はこれを追跡するのにいくつかの問題を抱えています。どんなポインタでも役に立ちます。私のDB設計では、プロファイルは1対1の関係にあるユーザーに属しています。私はそれがちょうど新しいものであることを望んでいます私は新しい目のセットが役立つかもしれないことに気づいていません。
ruby-on-rails - Railsネストされた特異なリソースルーティング
単一のネストされたプロファイルリソースを持つ単純なユーザーモデルがあるので、routes.rbには次のものがあります。
これにより、予想されるルートが生成されます。
モデルを更新し、更新が成功するとリダイレクトする単純なコントローラー更新メソッドを作成しました。
問題は、フォームが送信されると、フォームがmydomain.com/users/4/profile.22にリダイレクトされることです。ここで、22はプロファイルのIDです。ルーティングは「22」をフォーマットとして解釈するため、これは明らかにコントローラを混乱させます。
私の質問は、これを代わりにmydomain.com/users/4/profileにリダイレクトするにはどうすればよいですか? 私はredirect_toステートメントで次のバリエーションを試しましたが、効果はありませんでした。これらはすべて同じ誤ったURLになります。
さらに、他の場所で「user_profile_path(@user)」を使用すると、正しいURLが生成されます。
何か案は?ああ、それが助けになるなら、私はRails3.0.0とRuby1.9.2を使用しています。
ruby-on-rails-3 - Rails 3-セッションとルーティング!
複数のプロジェクトを持つWebアプリを構築しています。一般的なデータモデルは、各プロジェクトにドキュメントやレジスタなどの多くのリソースがあるようなものです。
ルーティングには難しさがあります!! プロジェクトに対するCUDアクションは、名前空間を介して実行されます。ただし、ユーザーがプロジェクトを表示しているときは、次のようなルートにproject_idが必要です。
'0.0.0.0:3000/:project_id/documents/
また
私は次のようなことを考えました:
project_idをセッションに保存すると思いますか?私がこれらのルートを忘れて、次のような単純なものにした場合:
次に、CRUDアクションをドキュメントにバインドしたり、現在のプロジェクトに登録したりするにはどうすればよいですか?確かに、これをすべてのコントローラーに配線する必要はありませんか?
ヘルプ!
ruby-on-rails - Rails 名前空間と入れ子になったリソース
私のアプリに Foo と Bar の 2 つのモデルがあるとします。
Foo オプションで、Bars_to Bar に属します。
今、私は 1 つの Foo を見ることも、特定の Foo を検索することもでき、FoosController がそれらすべてを処理します。私の URL は次のようなものです:
foos/1
とfoos/new
ときどきバーを見たくなります。BarsController がそれを処理し、次のように取得します:
bars/1
またはbars/1/edit
.
Bar を見ている場合、その Bar の一部であるすべての Foo をブラウズしたいと思うかもしれません。bars/1/foos/
それで、それらのFoosを見るために使用したいと思います。
これは、ネストされたリソースでは非常に簡単で、次のようになります。
ただし、Bar の一部である Foo は、通常の Foo とは一線を画す特別なものです。したがって、たとえば、foos/1
またはをロードbars/1/foos/1
すると、同じ Foo が表示されますが、それぞれのケースで異なる情報に注目しています。
そのため、バーのコンテキストにあるときに Foos を処理する BarFoos Controller を持つことを考えていました。ただし、BarFoos を Bar の下にネストすると、ヘルパーは and のようにbar_bar_foos_path
なりnew_bar_bar_foo_path
ます。それは冗長に思えます。
それで、今は名前空間について考えていますが、これはこれまで調べたことのないものです。私が定義できるレールガイドに表示されます:
そうすれば、 のFoosController
下app/bar/
で 2 秒を作ることができ、その FoosController は のbar_foo_path(:id)
代わりに のような素敵なヘルパーを使用して、Bar 内で Foos を処理できbar_bar_foo_path(:id)
ます。
しかし、それを行うと、私のBarsController
? I haveBarsController
の代わりに if にリクエストをルーティングするにはどうすればよいですか?resources :bars
namespace "bar"
最後に、最上位の FoosController と名前が競合しないようにするために、セカンダリ FoosController 内で何か特別なことをする必要がありますか? ルーティングに「名前空間」と表示されていることは理解していますが、ルビー コードの残りの部分は、app/bar/foos_controller
とapp/foos_controller
が同じクラスではないことをどのように認識しているのでしょうか。
ありがとう!