2013-07-01 73 views
0

我有這個項目,我正在研究哪裏有清單。這個清單有一個event_id,然後爲每個任務完成2個字段,一個用於完成它的user_id,另一個用於日期。首先,我所做的是抓住所有清單,這給我一個acitverecord ::所有清單的關係。然後我只想得到完整的清單。Rails:在範圍內使用循環

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, { } 

回答

1

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

例如,會給你一個ActiveRecord ::關係。這與CheckList.where(complete: true)相同。您可以使用all將此關係轉換爲結果數組。

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

在Rails 4,all會返回一個ActiveRecord ::關係爲好,所以這將是必要使用to_a將其轉換爲一個數組,但現在all會返回一個數組。

+0

好的,我必須交給一個數組,以便在範圍內遍歷它嗎?我不能完成:真,因爲有多個字段可能是真的,我必須檢查,看看這些字段是否是一個有效的任務。所以基本上我需要到具有關係或數組的範圍,然後遍歷每個項目並確定自己是否完整。 – user1977840

+0

如果你不能在查詢內做到這一點,那麼是的。但是你也可以在關係上調用'.each',它會自動將它轉換成一個數組。在很多情況下,Relation會像數組一樣工作。 –

+0

.each也將它變成一個數組。基本上發生了什麼是我有一個有4個任務的清單,那就是video_check,audio_check,operator_check和console_check。所以我需要檢查每一個是否真實,但並非所有清單都需要全部4.我還需要檢查視頻,音頻,操作員和控制檯是否用'event_id'(外鍵)支付我檢查它。我不介意以不同的方式嘗試,但我不能想到一個能夠完成我需要的工作。 – user1977840