Ruby on rails Rails模型错误
我有一个组件模型,它有很多:框架。但是:框架不属于:组件,因为一个框架可能属于许多组件 我有一个控制器,它返回一个json和一个concret组件的框架: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
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
。请参阅我的更新答案以及您需要的迁移。