как пройтись по ряду моделей - PullRequest
1 голос
/ 29 июля 2011

У меня есть, скажем, 5 моделей.

Thread
Poll
Message
Wall
Zone

Мне бы хотелось что-то, где я мог бы перебрать каждую модель, содержащуюся в строке или массиве, и если эта модель имеет поле user_id, обновите его до любогоЯ хотел бы установить его на.

Любая идея о том, как вы можете сделать что-то вроде

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

Где Thread проходит через список моделей ["Thread", "Poll"", ....]

Спасибо

Ответы [ 3 ]

4 голосов
/ 29 июля 2011

попробуйте это:

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
2 голосов
/ 29 июля 2011
[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
2 голосов
/ 29 июля 2011

Вот возможное решение:

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  

Но это обновляет всю базу данных. Вы уверены, что хотите это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...