使用当前资源来简化Devise控制器中的代码

时间:2013-08-05 10:40:49

标签: ruby-on-rails devise

我正在使用Devise进行用户身份验证,并且正在覆盖/修改注册控制器上的创建操作,但是,它有可能变得非常冗长,并且重复自己太多。我正在创建一个应用程序,用户可以为其帐户设置密钥持有者,具有特定权限,以及具有只读访问权限的访客。

我想要实现的是在create方法中使用'resource'对象,而不是指定我是指客户还是keyholder。例如,检查用户是否已拥有其帐户的密钥持有者或访客(他们只允许使用一个)。

即。取而代之的是:

if @user.keyholder_id
  # don't create keyholder
end

if @user.guest_id
  # don't create guest 
end

是否可以使用当前的resource_name,例如:

if @user.{resource_name}_id.nil?
  # create resource in question
end

1 个答案:

答案 0 :(得分:0)

你可以这样做:

@user.read_attribute("#{resource_name}_id").nil?

要动态设置属性,请使用:

@user.update_attribute("#{resource_name}_id", resource.id)