Ruby on rails 使用具有默认作用域的lambda

Ruby on rails 使用具有默认作用域的lambda,ruby-on-rails,activerecord,ruby-on-rails-2,Ruby On Rails,Activerecord,Ruby On Rails 2,在rails 2.3中使用lambda和default\u作用域,我面临着lil问题 default_scope lambda { {:account_id => account_id } } 默认范围lambda{{:account\u id=>account\u id} 我使用了上面的代码,但显示了错误消息ArgumentError:参数数目错误(1代表0) 我使用的是lambda工作方式吗 谢谢好的,您希望使用的是一个命名的作用域,这样以后就可以使用其他作用域了。通常您不想更改默认范围,因

在rails 2.3中使用lambda和
default\u作用域
,我面临着lil问题

default_scope lambda { {:account_id => account_id } } 默认范围lambda{{:account\u id=>account\u id} 我使用了上面的代码,但显示了错误消息
ArgumentError:参数数目错误(1代表0)

我使用的是
lambda
工作方式吗


谢谢

好的,您希望使用的是一个命名的作用域,这样以后就可以使用其他作用域了。通常您不想更改默认范围,因为它会影响其他查询

下面的代码创建了一个名为
current\u account
的命名范围,它确保所有记录都符合条件,记录的account\u id必须与current account\u id匹配

named_scope :current_account, :conditions => { :account_id => account_id }
然后,当您想使用命名的_作用域时,可以调用以下代码:

User.current_account.all
这就像打电话:

User.all(:conditions => { :account_id => account_id })

希望这能对您有所帮助,如果有什么让人困惑的地方,请告诉我。

您想解释一下您的默认范围是什么吗?为什么要使用Lambda?我正在应用层运行上面的代码,为一组模型设置默认范围,这样我就可以通过简单的搜索轻松获得特定帐户的记录,比如用户模型中的“User.all”。问题是,当我第二次运行上述代码时,它仍然使用以前的帐户id。我不确定问题是什么,只是想尝试一下。我将为此创建一个命名范围,让我看看是否可以为您提供一个示例。请稍等。好的,看看我的答案,看看它是否对您有效。感谢@DevinM提供的解决方案,但我们不能用默认作用域来实现吗?可以,我只是说这是个坏主意,如果您想要不使用该作用域的记录呢?然后你必须调用
User.unscoped
,这很混乱。事实并非如此。使用其启用子域的应用程序和始终限定范围的记录。无论何时运行
User.all
,该子域(帐户)的记录都应从
User
表返回。我认为这是有道理的。我从来不用使用
非作用域
。所以总是有作用域?应用程序的管理界面如何?没有这样的管理用户来控制所有帐户。每个帐户都有管理员用户,他们只能控制相应的帐户。