如何使用 ActiveRecord 和 Rails 让急切加载的条件稍后延迟加载

发布于 2024-07-21 20:49:46 字数 344 浏览 5 评论 0原文

首先让我展示一些代码。

class User
  has_and_belongs_to_many :roles
  named_scope :employees, { :conditions => ["roles.name = 'Employee'"], :include => :roles }
end

好的,所以稍后在控制器中我想正确搜索所有员工。 我设置了命名范围来帮助通过连接和条件搜索来完成此操作。 但问题是在视图中我想显示所有用户角色,但它只会显示员工角色。

无论如何,我可以说“user.roles”并在我已经急切加载它之后将其延迟加载到视图中吗?

First let me show some code.

class User
  has_and_belongs_to_many :roles
  named_scope :employees, { :conditions => ["roles.name = 'Employee'"], :include => :roles }
end

OK, so later in a controller I wanted to search for all the employees right. I set the named scope up to help do that with the join and conditional search. But the problem is in the view I want to show all of that users roles, but It will only display the employee role.

Is there anyway that I can say "user.roles" and have the be lazy loaded in the view after I have already eager loaded it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心不设防 2024-07-28 20:49:46

habtm 的文档 (以及 has_many)指出您可以使用可选参数访问该集合:

集合(force_reload = false)

返回所有关联对象的数组。 空数组是
如果没有找到则返回。

您可以使用 user.roles(true) 重新加载角色。

The documentation for habtm (as well as has_many) states that you can access the collection with an optional parameter:

collection(force_reload = false)

Returns an array of all the associated objects. An empty array is
returned if none are found.

You can reload the roles with user.roles(true).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文