我正在尝试在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
答案 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
。