0

has_many :framework というコンポーネント モデルがあります。しかし、フレームワークはコンポーネントに属していません。フレームワークは多くのコンポーネントに属する可能性があるからです。

concret コンポーネントのフレームワークを使用して json を返すコントローラーがあります。

def getFrameworks
    @component = Component.find(params[:component_id])
   respond_to do |format|
      format.html { redirect_to components_url }
      format.json { render json: @component.frameworks, location: @component }
   end
end

しかし、それは私に次のエラーを与えます:

SQLite3::SQLException: no such column: frameworks.component_id: SELECT "frameworks".* FROM "frameworks"  WHERE "frameworks"."component_id" = 298

モデルを間違って定義していますか? どうしたの?

4

3 に答える 3

1

あなたのケースでは、関係を使用したいと思いますhas_manyドキュメントを参照してくださいbelongs_tohas_and_belongs_to_many

必要な移行の例を次に示します。

class CreateComponentsFrameworks < ActiveRecord::Migration
  def change
    create_table :components_frameworks, :id => false do |t|
      t.integer :component_id
      t.integer :framework_id
    end
  end
end
于 2012-12-18T12:29:23.223 に答える
0

はい、モデル定義は確かに間違っていhas_manyます。関連性は、Framework モデルに component_id という名前のフィールドがあるという事実に依存しています。コンポーネントはフレームワークに属していないため、モデルでそのフィールドを定義していません。

あなたが望むものを達成するために、あなたが望むものをhas_and_belongs_to_many正確にモデル化する関係を使用することができます: コンポーネントには多くのフレームワークがあり、フレームワークは多くのコンポーネントに属することができます

ガイドへのリンク

于 2012-12-18T12:29:18.643 に答える
0

はい、間違ったモデルを定義しています。多対 1 の関係を定義しているため、component_id に関連するエラーが発生しています。

これがあなたがしていることであり、ここまたはここあなたがしなければならないことです。これは、どのオプションを使用するかを決定するのにも役立ちます。

于 2012-12-18T12:30:41.717 に答える