我是否必须在每个我想用Devise gem访问的表中包含user_id?(Rails)

时间:2016-01-06 23:21:11

标签: ruby-on-rails devise

我正在使用轨道上的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吗?

2 个答案:

答案 0 :(得分:2)

您无需更改它,只需设置设计以使用候选模型,如果这是您想要的。您可以为您喜欢的用户帐户使用任何名称。查看devise documentation

但是,如果您是Rails的新手,那么全部使用:image_urls是一种常见的方式。

答案 1 :(得分:1)

不,您不需要在每张桌子上加{4}。

user_idforeign 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