Помощь с запросами Rails find_by - PullRequest
2 голосов
/ 12 апреля 2009

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

Итак, я хочу что-то вроде этого (но это синтаксически неверно):

@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 ]

2 голосов
/ 12 апреля 2009

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

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

Это создаст SQL-запрос с условием where вроде:

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

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

1 голос
/ 12 апреля 2009

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

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

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

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