我正在使用轨道上的Devise gem进行身份验证,我已经设置好所有工作。我在文档中没有理解的是,如果我需要使用这个gem将user_id字段添加到每个表中。我有:
users table
candidates table
activities_candidates table
candidates_languages table
languages table
and some others like this
我需要在哪些表中包含user_id字段???到目前为止我使用candidate_id作为我需要关系的表的外键,我现在应该更改它以使用user_id而不是candidate_id吗?
答案 0 :(得分:2)
您无需更改它,只需设置设计以使用候选模型,如果这是您想要的。您可以为您喜欢的用户帐户使用任何名称。查看devise documentation。
但是,如果您是Rails的新手,那么全部使用:image_urls
是一种常见的方式。
答案 1 :(得分:1)
不,您不需要在每张桌子上加{4}。
user_id
是foreign key - 如果您将其包含在所有其他表格中,则会显示antipattern(您的user_id
模型不存在)
正确修复方法是在User
模型上使用Devise:
<强>设计强>
Devise支持使用您想要的any model:
Candidate
您必须更改#config/routes.rb
devise_for :candidates
#app/models/candidate.rb
class Candidate < ActiveRecord::Base
devise :invitable, :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :invitable
#Associations
has_and_belongs_to_many :languages
...
end
表格以包含candidates
功能(您只需将devise
表重命名为users
并放弃当前使用迁移来复制列结构。
-
外键
另一种解决方法是更改关联的candidates
开关(在foreign_key
模型上):
User
您基本上必须添加#app/models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :languages, join_table: :candidate_languages, foreign_key: :candidate_id
has_and_belongs_to_many :activities, join_table: :activities_candidates, foreign_key: :candidate_id
end
模型的所有关联,并明确定义其Candidate
。而且,是的,它会和听起来一样多。
从上面的代码中可以看出,显而易见的是,您应该将foreign key
模型替换为User
。