在我的应用程序中,我有3个表格,用户,列表,任务。Rails Migrations - 外键的替代名称?
用户和列表是多对多的关系,任务属于列表,用户可以完成任务。
对于我的迁移,当用户完成列表时,我想将它在数据库中完成的人存储起来,但我不确定如何执行此操作。
我可以简单地将t.integer :user_id
添加到我的任务迁移中,但我想将其称为.completed_by
。在我的用户表中引用:user_id的东西,但名为:completed_by?
在我的应用程序中,我有3个表格,用户,列表,任务。Rails Migrations - 外键的替代名称?
用户和列表是多对多的关系,任务属于列表,用户可以完成任务。
对于我的迁移,当用户完成列表时,我想将它在数据库中完成的人存储起来,但我不确定如何执行此操作。
我可以简单地将t.integer :user_id
添加到我的任务迁移中,但我想将其称为.completed_by
。在我的用户表中引用:user_id的东西,但名为:completed_by?
正如MrDanA提到的,你可以指定一个不同的foreign_key,但是我会推荐它。如果可以的话,如果你仍然使用实体名称约定,那么你的数据库结构在低级别上会更容易理解。
未来,很明显user_id指向用户表,而新的程序员将无法在不探索代码的情况下在用户表处指出completed_by点。如果你确实想拥有一个特定的名字,或者需要多个用户关联,那么类似于“completed_user_id”的东西在应用和数据库级别都会保持清晰。
然后你可以添加方法:
has_one :user
has_one :completed_by, :class_name => "User", :foreign_key => "completed_user_id"
或
has_one :user
def completed_by
self.user.id
end
等
在您的迁移,添加t.integer :completed_by
然后,在你的模型,而不是:
has_one :user
做:
has_one :user, :class_name => "User", :foreign_key => "completed_by"
甚至定制关联的名称,如:
has_one :completer, :class_name => "User", :foreign_key => "completed_by"