代码之家  ›  专栏  ›  技术社区  ›  Clay

rubyonrails:如何在多态模型中为*\u类型列播种?

  •  0
  • Clay  · 技术社区  · 15 年前

    我有很多数据,我正试图将它们植入Rails2.3.8中的多态模型中。所有数据的关联都与县模型相关联。数据如下所示:

    data = Datum.create([
      ...
      { :value => '14389', :value_type => County, :value_id =>'3103'},
      { :value => '59013', :value_type => County, :value_id =>'3105'},
      { :value => '17117', :value_type => County, :value_id =>'3106'},
      ...
    ])
    

    我有成千上万的这些值,我想种子到数据库中。它们与上面的值相似,只是有些与县模型相关,有些与州模型相关,有些与城市模型相关。它们是静态值,在种子设定到数据库中后将不进行编辑。

    如何将模型种子植入:value\u type字段?

    (或者。。。我的做法是否有误?如果有,你会怎么做?)

    以撒-

    create_table "data", :force => true do |t|
      t.integer  "value"
      t.string   "value_type"
      t.integer  "value_id"
      t.datetime "created_at"
      t.datetime "updated_at"
    end
    
    create_table "counties", :force => true do |t|
      t.string   "name"
      t.integer  "state_id"
      t.integer  "ansi_code"
      t.string   "ansi_class"
      t.datetime "created_at"
      t.datetime "updated_at"
    end
    

    我也尝试了以下的播种方法,但没有成功(引用County):

    { :value => '14389', :value_type => 'County', :value_id =>'3103'},
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Nick Ragaz    15 年前

    您肯定不需要模式中的“value”列——只需要“value\u id”和“value\u type”。那么您的种子数据应该如下所示:

    ...
    { :value_id => 12345, :value_type => "County" },
    ...
    

    另一种选择是:

    { :value => County.find(12345) }
    

    然后Rails会自动设置 :value_type :value_id

        2
  •  1
  •   Ryan Bigg Andrés Bonilla    15 年前

    之所以会发生这种情况,是因为您已经在模型中这样做了:

    belongs_to :value, :polymorphic => true
    

    因为您也在尝试设置表上的value列。Rails将无法分辨通过此方法设置关联或列之间的区别。要设置列,请使用以下命令:

    self[:value] = "something"
    
    推荐文章