gpt4 book ai didi

ruby-on-rails - 运行 rake 时出现 "Unknown key: polymorphic"

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:31 27 4
gpt4 key购买 nike

我想实现一个简单的多态。我的目标是用户、组和其他模型可以共享一个 ID 池,这样一切都代表一个 GlobalObject。我构建了这样的东西:

  • global_object.rb$ rails generate scaffold GlobalObject mode:integer 生成:

    class GlobalObject < ActiveRecord::Base
    attr_accessible :mode
    has_many :identifyable, :polymorphic => true, :dependent => :destroy
    end
  • user.rb$rails generate scaffold 用户登录密码生成:

    class User < ActiveRecord::Base
    attr_accessible :login, :password, :salt
    belongs_to :global_object, :as => :permittable
    end

随后的组模型将采用非常相似的结构。我没有修改 db 文件夹中的迁移文件,只是执行了 $ rake db:migrate

  • 20131102224115_create_global_objects.rb:

    class CreateGlobalObjects < ActiveRecord::Migration
    def change
    create_table :global_objects do |t|
    t.integer :mode
    t.timestamps
    end
    end
    end
  • 20131102224332_create_users.rb:

    class CreateUsers < ActiveRecord::Migration
    def change
    create_table :users do |t|
    t.string :login
    t.string :password
    t.timestamps
    end
    end
    end

当我执行 $ rake 时,它显示了两条令人印象深刻的痕迹:

(...)hash/keys.rb:51:in `block in assert_valid_keys': Unknown key: polymorphic (ArgumentError)
from /Users(...)
...

(...)hash/keys.rb:51:in `block in assert_valid_keys': Unknown key: polymorphic (ArgumentError)
from /Users(...)
...

当我删除 global_object.rb 中的 :polymorphic => true 时,会出现相同的错误,但不是 Unknown key: polymorphic,而是 Unknown键:如。怎么了?

最佳答案

这里有几个问题:

  • 您在迁移中缺少应该引用 identifyable_ididentifyable_type 的多态关系列。
  • 您指的是不同名称的多态关联 - identifyablepermittable
  • 多态关系意味着在子元素上设置 (belongs_to) 并被多个父类引用 (has_many)。你有另一种方式,它不受支持(从建模的角度来看并没有真正意义)。

了解 GlobalObject 的用途有助于确定多态关联是否是此处的正确方法。但是如果你想使用它们,你要么需要使 GlobalObject belong_to 可识别(并在那里添加必要的列),要么你需要将它移动到 User 并在那里添加列。

关于ruby-on-rails - 运行 rake 时出现 "Unknown key: polymorphic",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com