Rails 3 HABTM находит по записи связанный атрибут модели - PullRequest
6 голосов
/ 05 апреля 2011

Я думаю, что это действительно просто, но я ужасен с SQL, поэтому понятия не имею, как это сделать ...

У меня есть стандартные отношения HABTM между двумя моделями, LandUse и Photo.Итак, у меня есть таблица присоединения land_uses_photos, и у каждой модели есть стандартный макрос, например:

Photo
has_and_belongs_to_many :land_uses

Таблица землепользования имеет: ID и Имя (строка).

Я хочунайдите фотографии, где название землепользования = «foo», «bar» или «baz».Как мне это сделать?

Я посмотрел на этот вопрос и попытался:

Photo.includes(:land_uses).where('land_use.id'=>[6,7])

... но это дало мне:

ActiveRecord::StatementInvalid: No attribute named `id` exists for table `land_use`

Это фальшивка, вот schema.rb как для LandUse, так и для таблицы соединений:

create_table "land_uses", :force => true do |t|
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "display_order"
end

create_table "land_uses_photos", :id => false, :force => true do |t|
  t.integer "land_use_id"
  t.integer "photo_id"
end

Итак, как мне сделать этот тип поиска?И чтобы задать только один вопрос вместо двух, как я могу найти с условием «и» вместо только с условием «или»?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 05 апреля 2011
Photo.joins(:land_uses).where('land_uses.name' => ['foo', 'bar', 'baz'])
1 голос
/ 05 апреля 2011

вы генерируете ошибку 'id', поскольку имя таблицы: land_uses, а не land_use

...