1

我是 Rails 的新手,我正在考虑一个很好的解决方案,在保存模型之前在模型中设置受保护的属性,但我找不到正确的方法。

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

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

是否有设置必须自动设置的参数的最佳实践?

提前致谢!

4

1 回答 1

2

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

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

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

  • 它打破了你的测试
  • 它可能不是到处都需要的——想象一下你创建了一个管理前端。
于 2012-07-10T08:01:06.943 回答