Rails在模型中设置不可访问属性的最佳实践

时间:2012-07-10 07:57:48

标签: ruby-on-rails model rspec callback

我是Rails的新手,我在想一个很好的解决方案,在保存它们之前在我的模型中设置受保护的属性,但我找不到合适的方法。

假设我有属于公司的用户,这些公司可以有很多客户。在保存新客户端之前,我想设置其company_id,从存储在会话中的current_user的company_id获取它(我正在使用Devise)。

我正在考虑使用模型回调,如before_create或其他任何东西,但我意识到我的Rspec模型测试可能会失败,因为在运行它们时将没有current_user ...

是否有设置此参数的最佳做法必须自动设置?

提前致谢!

1 个答案:

答案 0 :(得分:2)

只需将其设置在控制器中即可。

def create
  @new_user = User.new(params[:user])
  @new_user.company = current_user.company # <-- here
  if @new_user.save
    # ...
  else
    # ...
  end
end

如果在模型回调中设置它,则存在一些缺点。

  • 它打破了你的考验
  • 在任何地方都可能不需要 - 想象一下你创建了一个管理员前端。