Rails:在范围内使用循环



我有一个正在进行的项目,我有一份清单。这个清单有一个event_id,然后每个任务有两个字段,一个用于完成任务的user_id,另一个用于日期。首先,我要做的是获取所有的检查表,这给了我一个acitverecord::所有检查表的关系。然后我只想得到完整的清单。

def index
    @check_lists = CheckList.joins(:booking).joins(:contract)
    @check_lists = @check_lists.complete if params[:status] == "complete"
    @check_lists = @check_lists.incomplete if params[:status] == "incomplete"
end

我的问题是,一旦我调用@check_lists.complete,它是否会自动为我提供模型中作用域中的数组?我是否必须在方法中传递一些东西才能获得数组并运行它?那么,一旦我有了activerecord::relation,我该如何在它中运行循环?

scope :complete, {  } 

scope :complete, -> { where(complete: true) }

例如,会给您一个ActiveRecord::Relation。这将与CheckList.where(complete: true)相同。您可以使用all将此关系转换为结果数组。

CheckList.complete #=> ActiveRecord::Relation
CheckList.complete.all #=> Array

在Rails4中,all也会返回一个ActiveRecord::Relation,因此需要使用to_a将其转换为数组,但目前all将返回一个数组。

最新更新