2011-07-28 8 views
1

나는 5 가지 모델을 말하게했다.여러 모델을 반복하는 방법

Thread 
Poll 
Message 
Wall 
Zone 

그 모델이 USER_ID 필드가 있다면이 문자열이나 배열에 포함 된 각 모델을 통해 루프, 그리고, 내가로 설정하고 싶습니다 무엇으로 업데이트 할 수있는 무언가를하고 싶습니다.

당신이 스레드 모델의 목록을 통해 반복되는

[Thread.where(:user_id => XXX)].each do |model| 
... 
end 

같은 것을 할 수있는 방법에 대한 아이디어 [ "스레드", "설문 조사", ....]

감사

답변

4

이 시도 :

models = ["Thread", "Poll", ....] 

models.each do |model| 
    model = model.constantize 
    if model.columns.map(&:name).include?("user_id") 
    model.where(:user_id => my_user_id).each do |m| 
     do_stuff_with(m) 
    end 
    end 
end 
+0

크래시를 유발할 수있는 (사용자가 예상 한대로) 'user_id'가 있는지 여부를 확인하지 않습니다. – apneadiving

+0

yap. 죄송합니다. 나는 반 질문을 읽고 타이핑을 시작했다. –

2

여기에 가능한 솔루션입니다 :

user_id = 1 
[Thread, Poll, Message, Wall].each do |kind| 
    if kind.columns.find {|column| column.name == 'user_id'} 
    kind.update_all(:user_id => user_id) 
    end 
end 

하지만 전체 데이터베이스를 업데이트합니다. 이 작업을 수행 하시겠습니까?

2
[Thread, Poll, ...].each do |klass| 
    if klass.columns.map(&:name).include? "user_id" 
    klass.where(:user_id => user_id).all.each do |instance| 
     #do what you need here 
    end 
    end 
end 
관련 문제