【问题标题】:Rails model errorRails 模型错误
【发布时间】:2012-12-18 12:24:05
【问题描述】:

我有一个 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

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

【问题讨论】:

    标签: ruby-on-rails json model has-many


    【解决方案1】:

    has_many在相关型号上需要belongs_to,以适合您的情况 相信你想使用has_and_belongs_to_many关系,见doc

    这是您需要的迁移示例:

    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
    

    【讨论】:

    • 那么,如果我使用has_and_belongs_to_many,我是否需要向具有彼此ID的模型添加行?因为它给了我一个类似的错误:SQLite3::SQLException: no such table: components_frameworks: SELECT "frameworks".* FROM "frameworks" INNER JOIN "components_frameworks" ON "frameworks"."id" = "components_frameworks"."framework_id" WHERE "components_frameworks"."component_id" = 296
    • 这是因为要实现 has_and_belongs_to_manyrelation,您必须创建一个表来保存关系,在您的情况下,它将是一个表 components_frameworks,它不应该有一个 id 并且有 2列:framework_idcomponent_id。请参阅我更新的答案以及您需要的迁移。
    【解决方案2】:

    是的,模型定义确实是错误的,has_many relashionship 依赖于框架模型有一个名为 component_id 的字段这一事实。由于组件不属于框架,您还没有在模型上定义该字段。

    要实现您想要的,您可以使用has_and_belongs_to_many 关系,它完全按照您想要的方式建模:一个组件有许多框架,而一个框架可以属于许多组件

    Link to the Guides

    【讨论】:

      【解决方案3】:

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

      Here 是您正在做的事情,herehere 是您需要做的事情。 This 也将帮助您决定使用哪个选项。

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多