使用devise作为我的身份验证系统我想在用户注册时构建我的个人资料。
我在SO上阅读了很多关于此的主题,并决定采用在模型中构建配置文件的方法:
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id, # FIXME This is secure?
end
class User < ActiveRecord::Base
devise ...
has_one :profile
accepts_nested_attributes_for :profile
def build_profile
Profile.create(:user_id => id)
end
end
我的两个问题是:
attr_accessible中的user_id是危险的(群众分配)?
我是否必须使用交易将我的个人资料创建放在控制器中(注册创建)? (如果我的个人资料无法构建,我仍然有用户记录)
答案 0 :(得分:2)
attr_accessible中的user_id是危险的(群众分配)?
是的,您应该避免在大多数时间将外键添加到attr_accessible,尽管可以使用(如果关联可以像国家一样公开访问),或者如果您覆盖setter并执行某种操作检查..
我是否必须使用交易将我的个人资料创建放在控制器中(注册创建)? (如果我的个人资料无法构建,我仍然有用户记录)
只需在用户模型中添加validates_associated :profile
,也可以validates :profile, presence: true
(如果validates_associated允许为零,则有点忘记)