2

Rails と Backbone.js の両方を使用して新しいアプリケーションを作成しようとしていますが、かなりの数のネストされたリレーションがあり、かなり難しくなっています。

Rails 側では、Ingredients と Allergens の間に HABTM 関係を使用しています。一連のアレルゲンに関連する成分にアクセスしようとしています. 計画は、配列を使用して Allergens テーブルをクエリし、その ID を取得してから、AllergensIngredients テーブルに対してクエリを実行して、Ingredients ID を取得することでした。

ルートは次のようにネストされます。

  resources :ingredients do
    resources :allergens
  end

URL は「/ingredients/:ingredient_id/allergens」です。Railsでは素晴らしく機能します。バックボーン側では、コレクションを使用して URL '/allergens' でアレルゲンを取得しようとしましたが、Rails ルートに従って拒否されました (ルート '/allergens' は存在しません)。そこで、ネストされたルートの下にスタンドアロンresources :allergensルートを追加しました。これにより、Backbone への認識可能なルートが作成されましたが、Rails の allergens_controller.rb にはまだ問題が残っていました。

  class AllergensController < ApplicationController
    respond_to :html, :json
    def index
      respond_with(
        @ingredient ||= Ingredient.find(params[:ingredient_id]),
        @allergens = @ingredient.allergens,
      )
    end
  # ...
  end

@ingredient は ID がないと見つからないためです。Backbone.sync と $.get を使用してみましたが、それでも URL が必要であり、最終的に Rails コントローラーを通過します。Rails や URL からの干渉なしに、Backbone を使用してデータベース内の単一のテーブルを照会するにはどうすればよいですか? 手伝ってくれてどうもありがとう!

4

1 に答える 1

1

私はそれを別のアプローチで機能させました。Allergen.all を返す allergens_controller で新しいアクションを作成し、Backbone で AJAX get 要求を使用して xhr オブジェクトを返しました。エレガントな修正ではありませんが、それでもなお修正です!

于 2012-11-20T18:23:48.690 に答える