在我的 Rails 4 应用程序项目(模型)has_many
视频(模型)中。我在视频模型中有一个命名范围:
scope :live, where( is_deleted: 0, sent_to_api: 1 )
在我的一个项目 View 中,我这样做(项目是项目的一个实例):
project.videos.live.size
我希望得到的是那个特定项目中的项目数量,但我得到的是任何项目中的视频数量。就好像 .live
不是从 .videos
返回一个子集而是替换它。
我看到它解释了here将命名范围相互链接起来应该与逻辑 AND 相结合,但是当应用于“关联方法”时 [<--不确定 .videos
在这种情况下的正确术语]似乎并不即将发生。
正确的做法是什么?
最佳答案
我相信它在 Rails 4 中应该是这样的:
scope :live, -> { where(is_deleted: 0, sent_to_api: 1) }
Rails 4 文档及其中的所有示例都向您展示了将可调用对象传递给作用域以确保它每次都被调用。如果它不能像这样工作,请尝试将其实现为类方法,看看它对您有何影响。
http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html
关于ruby-on-rails - rails 4 : how to use named scope with has_many associations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792180/