0

我有一个 has_many :framework 的组件模型。但是 :framework 不属于 :component,因为一个框架可能属于许多组件。

我有一个控制器,它返回一个带有具体组件框架的 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

Ahas_many需要belongs_to相关模型,对于您的情况,我相信您想使用has_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_manyrelashionship 依赖于框架模型有一个名为 component_id 的字段这一事实。由于 Component 不属于 Framework,因此您尚未在模型上定义该字段。

为了实现你想要的,你可以使用一种has_and_belongs_to_many关系,它可以准确地模拟你想要的:一个组件有很多框架,一个框架可以属于许多组件

链接到指南

于 2012-12-18T12:29:18.643 回答
0

是的,您定义了错误的模型,定义了多对一关系,这就是为什么您会收到与 component_id 相关的错误。

就是你正在做的事情,这里这里是你需要做的事情。也将帮助您决定使用哪个选项。

于 2012-12-18T12:30:41.717 回答