使用设计作为我的身份验证系统,我想在用户注册时构建我的配置文件。
我在SO上阅读了许多关于这方面的主题,并决定采用在模型中构建概要文件的方法:
profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id, # FIXME This is secure?
end
user.rb
class User < ActiveRecord::Base
devise ...
has_one :profile
accepts_nested_attributes_for :profile
def build_profile
Profile.create(:user_id => id)
end
end
我有两个问题:
有user_id在attr_accessible危险(mass- assignment)?
我是否必须使用事务将我的配置文件创建放在控制器(注册创建)中?(这里如果我的配置文件构建失败,我仍然有一个用户记录)
有user_id在attr_accessible危险(mass- assignment)?
是的,你应该避免在大多数情况下为attr_accessible添加外键,尽管在某些情况下它是可以使用的(如果关联可公开访问,例如国家),或者如果你重写setter并做某种检查。
我是否必须使用事务将我的配置文件创建放在控制器(注册创建)中?(这里如果我的配置文件构建失败,我仍然有一个用户记录)
只需在用户模型中添加validates_associated :profile
,也可以添加validates :profile, presence: true
(有点忘记validates_associated是否允许nil)