Rails 3 HABTM通过记录关联模型属性查找

And*_*rew 6 sql ruby-on-rails has-and-belongs-to-many ruby-on-rails-3

我认为这是非常基本的,但我对SQL很可怕,所以我不知道怎么做...

我在两个模型LandUse和Photo之间有一个标准的HABTM关系.所以我有一个land_uses_photos连接表,每个模型都有标准宏,如:

Photo
has_and_belongs_to_many :land_uses
Run Code Online (Sandbox Code Playgroud)

土地使用表具有:ID和名称(字符串).

我想找到Land Use Name ='foo','bar'或'baz'的照片.我怎么做?

我看了这个问题并试了一下:

Photo.includes(:land_uses).where('land_use.id'=>[6,7])
Run Code Online (Sandbox Code Playgroud)

......但那给了我:

ActiveRecord::StatementInvalid: No attribute named `id` exists for table `land_use`
Run Code Online (Sandbox Code Playgroud)

这是假的,这是LandUse和连接表的schema.rb:

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
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做呢?并且只使一个问题而不是两个问题,我怎么能找到一个"和"条件而不是一个"或"条件?

谢谢!

Pab*_* B. 7

Photo.joins(:land_uses).where('land_uses.name' => ['foo', 'bar', 'baz'])
Run Code Online (Sandbox Code Playgroud)

  • 当您想要加载关联数据时,请使用`includes`.当您想要避免N + 1问题时,这非常有用.在其他地方使用`join',因为它生成了一个更简单,更快的sql. (2认同)