哪里+阻止 - 不工作

时间:2015-02-13 05:46:42

标签: ruby ruby-on-rails-3

用户有很多帐户,帐户有一个角色。我需要检查至少有一个帐户有一个条件设置为true的角色:

@current_user.accounts.where { |x| x.role.some_condition? }.exists?

但是ArgumentError: wrong number of arguments (0 for 1)

即使这不起作用

@current_user.accounts.where { |x| true } # the same error
@current_user.accounts.where(true) # ActiveRecord::StatementInvalid: PG::DatatypeMismatch: ERROR:  argument of AND must be type boolean, not type integer

2 个答案:

答案 0 :(得分:1)

您可以使用any?执行此操作,因为所选答案指出了。但是,这会加载您的所有帐户,然后然后过滤它们。

如果条件是在角色表中设置的标志,则需要以下内容。

@current_user.
accounts.
joins(:role).
where(roles: {some_column_in_roles_table: true}).
group("accounts.id").
exists?

答案 1 :(得分:0)

尝试使用Enumerable#any?

@current_user.accounts.any? { |x| x.role.some_condition? }