如何禁止从rails中的嵌套资源中进行选择?

时间:2012-01-14 22:28:49

标签: ruby-on-rails ruby-on-rails-3

我有一个多租户的rails应用程序。它具有帐户,客户和交易的资源。一个帐户有很多客户有很多交易。我想确保我永远不会意外地执行Client.find,Transaction.find等(所有内容都必须通过the_account.clients.find或client.transactions.find等)。我想这样做,所以我不会忘记首先选择帐户,从错误的帐户中不小心显示错误的用户信息。

有没有办法禁用Client.find(Client.find_by_name,Client.find_by_etc)但仍允许the_account.clients.find?

1 个答案:

答案 0 :(得分:0)

我不知道完全禁用Client.find,但我可能会在我的每个Client和Transaction控制器的底部放置一个方法来处理查找。以下是客户端代码的样子:

def collection
  if current_user.admin?
    Client.all
  else
    current_user.account.clients
  end
end

然后,在我的控制器的每个地方,我通常会使用Client.find,我会替换collection。获取所有正确的记录,没有过度曝光的风险。