Ruby - 关系问题(has_one / has_many)

时间:2015-08-07 14:37:28

标签: ruby-on-rails relationship

我尝试创建一种方法来管理Items UserEvent有多少ItemDatum。我以为我可以通过另一个模型ItemDatum来做到这一点。

我认为User属于Eventhas_manyItems class ItemDatum < ActiveRecord::Base belongs_to :event belongs_to :user has_many :items end

Event

ItemDatum会有一个Items并且有ItemDatumclass Event < ActiveRecord::Base ... has_one :item_datum, dependent: :destroy has_many :items, through: :item_datum end

Items

ItemDatum属于许多class Item < ActiveRecord::Base has_and_belongs_to_many :item_datum ... end

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
      t.string :name
      t.string :text

      t.integer :location_id
      t.integer :item_datum_id

      t.timestamps null: false
    end
  end
end


class CreateItemData < ActiveRecord::Migration
  def change
    create_table :item_data do |t|

      t.integer :item_id
      t.integer :event_id
      t.integer :user_id

      t.timestamps null: false
    end
  end
end

class CreateItems < ActiveRecord::Migration
  def change
    create_table :items do |t|
      t.string :name
      t.string :description
      t.string :item_type
      t.integer :value
      t.integer :item_datum_id

      t.timestamps null: false
    end
    add_index :items, :name, unique: true
  end
end

然而,这并不是很有效,而且我没有足够的知识来正确调试它。

以下是迁移,如果这也有帮助:

config/app.php

1 个答案:

答案 0 :(得分:0)

如果您想要一个项目有很多项目基准,那么您就错过了一个表格。我通常更喜欢使用habtm指定模型。

 rails g model ItemDataItem item_data_id:integer item_id:integer


 class ItemDataItem < ActiveRecord::Base
   belongs_to :item_data
   belongs_to :item
 end

 class Item < ActiveRecord::Base
   has_many :item_data_items
   has_many :item_datum, through: :item_data_items
 end

然后在ItemData类中添加相同的has_many和has_many。我可能有一些我的名字错在复数,但它应该做的伎俩。

修改

如果项目只属于一个数据,只需更新项目模型:

class Item < ActiveRecord::Base
  belongs_to :item_datum

  ...
end