2

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

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

业务.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

类型.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
4

2 回答 2

4

遵循 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
于 2012-06-16T18:48:17.087 回答
0

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

我可以建议您不要无故更改外键名称。如果不指定外键,则默认为type_id.

于 2012-06-16T18:30:46.597 回答