我有一个名为employee的模特。以下是我的迁移文件。
class CreateEmployees < ActiveRecord::Migration
def change
create_table :employees, id: false do |t|
t.string :name
t.string :password
t.string :role
t.primary_key :name
end
end
end
现在,我想创建一个名为“teamplayer”的模型,其列为“name”,需要在employee模型中引用“name”列。并且'tl'专栏 这与该模型无关。以下是我的“teamplayer”迁移文件。
class CreateTeamplayers < ActiveRecord::Migration
def change
create_table :teamplayers, :id false do |t|
t.string :tl
t.string :name
end
end
end
在上面的文件中,如何将“name”列引用给模型员工?那么如何在rails中实现外键。
答案 0 :(得分:0)
我想你想研究一下Active Record Associations(http://guides.rubyonrails.org/association_basics.html)
我知道您已经要求在name
上创建外键,但除非您打算确保该名称是唯一的,否则这可能不是最好的计划(取决于您尝试建模的实际关系) - 一对多/一对一等)。
我很想在employees.id
上设置外键关系。为此,您可以使用has_many
和belongs_to
关联。
您可以按如下方式更改teamplayers
迁移:
class CreateTeamplayers < ActiveRecord::Migration
def change
create_table :teamplayers, :id false do |t|
t.belongs_to :employee
t.string :tl
end
end
end
然后在您的Employee
模型中,您可以添加has_many
方面的内容:
class Employee < ActiveRecord::Base
has_many :teamplayers
end
通过简单的连接,您仍然可以轻松获得Teamee队列记录的员工姓名。
编辑 - 为了获得员工,你可以做这样的事情,假设@t
是一个teamplayer实例:
@t.employee.name
(代码未经测试且来自内存......)
答案 1 :(得分:0)
您可以在teamplayer模型中执行此操作,只需在迁移中添加索引
//this is my model
public function uproQ($data)
{
return $this->db->insert('products',$data);
}
您可以在员工模型中将名称设置为主键,如此
class CreateTeamplayers < ActiveRecord::Migration
def change
create_table :teamplayers, :id false do |t|
t.string :tl
t.string :name
end
add_index :teamplayers, :name
end
end
现在在模型Teamplayer中你可以设置外键
class Employee < ActiveRecord::Base
self.primary_key = "name"
has_many :teamplayers
end
这应该引用员工模型的“名称”