我想要完成的是使功能将分配特定的帐户给用户。如果用户是管理员,他将获得他公司的所有帐户,如果他是协作者,他将只从公司获得选定的帐户。解析的数据是包含account_id的用户对象和数组帐户。我编写了这个函数,允许我将account_id转换为object,然后将其分配给user。一个问题是,当帐户数组只有一个对象时,我会得到错误
undefined method `each' for #<Account
谁能告诉我如何避免这种情况?或者建议我不同的更好的方法来实现这个函数。
我写的函数:
def assign_matching_accounts
if @user.collaborator?
accounts.map! do |account|
Account.find_by(id: account['account_id'], company_id: @user.company_id)
end
accounts.compact!.uniq!
elsif @user.admin?
accounts = Account.find_by(company_id: @user.company_id)
end
@user.accounts = accounts unless accounts.nil?
end
类
Account:
has_and_belongs_to_many :users
User:
has_and_belongs_to_many :accounts
最简单的修复方法就是将它包装在一个数组中,这样你就可以遍历它了。
[Account.find_by(company_id: @user.company_id)]