2009-04-12 4 views
2

Скажите, если @news_writers - это массив записей. Затем я хочу использовать @news_writers для поиска всех новостей, которые написаны всеми авторами новостей, содержащимися в @news_writers.Помощь с Rails find_by

Так что я хочу что-то вроде этого (но это синтаксически неправильно):

@news = News.find_all_by_role_id(@news_writers.id) 

Обратите внимание, что

class Role < ActiveRecord::Base 
    has_many :news 
end 

and 

class News < ActiveRecord::Base 
    belongs_to :role 
end 

ответ

2

Как ennen, я не уверен, какие отношения должны иметь ваши модели. Но в целом, вы можете найти все модели со значением столбца из заданного набора, как это:

News.all(:conditions => {:role_id => @news_writers.map(&:id)}) 

Это создаст SQL запрос с а, где условия, как:

WHERE role_id IN (1, 10, 13, ...) 

где целые числа идентификаторы @news_writers.

1

Я не уверен, если я вас понимаю - @news_writers это коллекция Ролевые модели? Если это предположение верно, ваша ассоциация кажется обратным - если они представляют авторов новостных статей, не должна принадлежать News role к роли (являющейся автором)?

В любом случае, я бы предположил, что самым прямым подходом было бы использовать итератор над @news_writers, призывая к ассоциации для каждого news_writer (например, news_writer.news) по очереди и вставляя его в отдельную переменную.

Редактировать: Предложение Даниила Лукрета является гораздо более элегантным решением, чем выше.

+0

Вы правы, я исправил эту связь. – alamodey