:tablename__columnname
(밑줄 두 개) 구문을 사용하여 액세스 할 열에 대해 qualify the table name이 필요합니다. 여기
@artist.albums_dataset.filter(:albums_artists__foo => "bar").each do |album|
또한 생성 된 SQL을 보여주는 테스트입니다 : BTW
require 'sequel'; DB = Sequel.sqlite
DB.create_table(:artists){ primary_key :id; String :name }
DB.create_table(:albums){ primary_key :id; String :name }
DB.create_table(:albums_artists) do
String :foo
foreign_key :artist_id, :artists
foreign_key :album_id, :albums
primary_key [:artist_id, :album_id]
end
class Artist < Sequel::Model; many_to_many :albums; end
class Album < Sequel::Model; many_to_many :artists; end
Artist.multi_insert [ {name:"Bob"}, {name:"Dylan"}, {name:"Joni"} ]
Album.multi_insert [ {name:"BobSolo"}, {name:"JoniSolo"},
{name:"BobJoni"}, {name:"BobDylan"},
{name:"BobJoniDylan"} ]
# If the album name includes the artist, add them to it.
Artist.each do |ar| Album.each do |al|
if al.name.include?(ar.name)
DB[:albums_artists] << {artist_id:ar.id, album_id:al.id}
end
end end
bob.albums.map(&:name)
#=> ["BobSolo", "BobJoni", "BobDylan", "BobJoniDylan"]
bob.albums_dataset.filter(albums_artists__foo:"bar").sql
#=> SELECT `albums`.*
#=> FROM `albums` INNER JOIN `albums_artists`
#=> ON (`albums_artists`.`album_id` = `albums`.`id`)
#=> WHERE ((`albums_artists`.`artist_id` = 1)
#=> AND (`albums_artists`.`foo` = 'bar'))
bob.albums_dataset.filter(albums_artists__foo:"bar").all
#=> [#<Album @values={:id=>5, :name=>"BobJoniDylan"}>]
, 일부 데이터베이스에 대한 귀하의 구문 (예를 들어 sqlite3를) 잘 작업을 수행합니다. 다음 번에는 (a) 사용중인 RDBMS와 (b) 정확히 어떤 오류가 있는지 언급 할 수 있습니다. ("작동하지 않습니다"는 분명하지 않습니다.) – Phrogz