Ruby on rails Rails模型错误

Ruby on rails Rails模型错误,ruby-on-rails,json,model,has-many,Ruby On Rails,Json,Model,Has Many,我有一个组件模型,它有很多:框架。但是:框架不属于:组件,因为一个框架可能属于许多组件 我有一个控制器,它返回一个json和一个concret组件的框架: def getFrameworks @component = Component.find(params[:component_id]) respond_to do |format| format.html { redirect_to components_url } format.json { rend

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

我有一个控制器,它返回一个json和一个concret组件的框架:

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

我对模型的定义是否错误?怎么了?

是的,模型定义确实是错误的,
有很多关系,这取决于框架模型有一个名为component\u id的字段。由于组件不属于框架,您没有在模型上定义该字段

为了实现您想要的,您可以使用一个
has\u和\u-beliens\u-To\u-many
关系,它精确地模拟了您似乎想要的东西:一个组件有许多框架,一个框架可以属于许多组件


A
在相关车型上有许多
需要A
属于
,以适合您的情况 我相信您要使用
has\u和\u belient\u to \u 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
class CreateComponentsFrameworksfalse do | t|
t、 整数:组件id
t、 整数:框架id
结束
结束
结束

是的,您定义的模型错误,您定义的是多对一关系,这就是为什么您会得到与组件id相关的错误


是你正在做的,或者是你需要做的。也将帮助您决定使用哪个选项。

因此,如果我使用
has_和_belient_to _many
,我是否需要向模型中添加具有彼此ID的行?因为它给我带来了一个类似的错误:
SQLite3::SQLException:没有这样的表:组件框架:选择“框架”。*从“框架”内部连接“框架”上的“组件框架”。“id”=“组件框架”。“框架id”其中的“组件框架”。“组件id”=296
这是因为要实现一个
has\u和\u属于\u many
关系,您必须创建一个表来保存该关系,在您的情况下,它将是一个表
components\u frameworks
,它不应该有一个id,并且有两列:
framework\u id
component\u id
。请参阅我的更新答案以及您需要的迁移。