Rails has_one和belongs_to迁移?

时间:2012-06-16 18:22:10

标签: ruby-on-rails migration belongs-to has-one

我正在尝试在Rails中建立两个模型之间的关系,但是我无法弄清楚在迁移中需要做什么。非常感谢任何帮助。

我希望每个企业都有类型/类别,例如“汽车”或“餐厅和酒吧”。

Business.rb:

class Business < ActiveRecord::Base
  has_one :category, :foreign_key => "cid"
  attr_accessible :description, :email, :facebook, :foursquare, :google, :manager,
  :mobile, :name, :phone, :url, :yelp
end

Type.rb:

class Type < ActiveRecord::Base
  attr_accessible :cid, :category
  belongs_to :business
end

CreateTypes迁移文件:

class CreateTypes < ActiveRecord::Migration
  def change
    create_table :types do |t|
      t.integer :cid
      t.string :category
      t.references :business

      t.timestamps
    end
  add_index :types, :cid
 end
end

CreateBusinesses迁移文件:

class CreateBusinesses < ActiveRecord::Migration
  def change
    create_table :businesses do |t|
      t.string :name
      t.string :url
      t.string :phone
      t.string :manager
      t.string :email
      t.boolean :mobile
      t.boolean :foursquare
      t.boolean :facebook
      t.boolean :yelp
      t.boolean :google
      t.text :description
      t.integer :cid

      t.timestamps
    end
  end
end

2 个答案:

答案 0 :(得分:3)

最简单的方法是保持rails命名约定。如果我得到了正确的,企业属于类型/类别。让业务引用类型。在业务方面添加belongs_to,在类型/类别方面添加has_many。大概是这样的:

class Business < ActiveRecord::Base
  attr_accessible :description, :email, :facebook, :foursquare, :google, :manager, :mobile, :name, :phone, :type_id, :url, :yelp
  belongs_to :type
end

class Type < ActiveRecord::Base
  has_many :businesses
end

class CreateTypes < ActiveRecord::Migration
  def change
    create_table :types do |t|
      t.string :category

      t.timestamps
    end
  end
end

class CreateBusinesses < ActiveRecord::Migration
  def change
    create_table :businesses do |t|
      t.string :name
      t.string :url
      t.string :phone
      t.string :manager
      t.string :email
      t.boolean :mobile
      t.boolean :foursquare
      t.boolean :facebook
      t.boolean :yelp
      t.boolean :google
      t.text :description
      t.integer :type_id

      t.timestamps
    end
  end
end

答案 1 :(得分:0)

您的businesses表必须具有整数字段cid,因为您将其设置为外键。您types表格不得包含cid字段。 types.id字段将用于创建关系。请注意,belongs_to方法没有foreign_key选项,您应该将其从调用中删除。

我可以建议你不要在没有理由的情况下更改外键名称。如果未指定外键,则默认为type_id