How to set up a has_many :through association with Ultrasphinx

5 просмотров
Перейти к первому непрочитанному сообщению

Adam

не прочитано,
20 февр. 2009 г., 20:19:0020.02.2009
– Ruby on Rails: Talk
I'm using the Ultrasphinx plugin with Sphinx to add search to my app,
but I'm having a tough time figuring out how to index a
has_many :through relationship. Say, for example, I'm looking at a
relationship like this:

Playlist has_many songs :through => 'playlistings'

I want to be able to do a song-based search that will return the
Playlists that have those songs. I know I need to use
the :association_sql key to set up the has_many :through join, but my
SQL sauce is weak. Here's what I have right now, which works only for
the first song:

is_indexed :fields => [{:field => 'name', :as =>
'playlist_name'}],
:include => [{:association_name => "songs", :field =>
'song_name',
:association_sql => "JOIN
(playlistings, songs) ON (playlists.id=playlistings.playlist_id AND
playlistings.song_id=songs.id)"}]

Unfortunately, like I said, if I do a search by song name, Ultrasphinx
only matches playlists if I search for the first song in a playlist...
searching by all other song names (e.g., the name of the second or
third song in a playlist) returns nothing. Any ideas?

Thanks so much for any help!
Adam

Adam

не прочитано,
20 февр. 2009 г., 21:43:0020.02.2009
– Ruby on Rails: Talk
Hey everyone, got it to work! Here's what I'm using:

is_indexed :fields => [{:field => 'name', :as => 'playlist_name'}],
:concatenate => [{ :class_name => 'Song', :field => 'name',
:association_sql => "LEFT JOIN playlistings ON
((playlist_id=playlists.id)) LEFT JOIN songs ON
(songs.id=playlistings.song_id)", :as => 'song' }]

Hopefully that'll help someone out sometime. :)

Paco Guzman

не прочитано,
2 нояб. 2009 г., 07:23:4202.11.2009
– rubyonra...@googlegroups.com
Adam wrote:
> Hey everyone, got it to work! Here's what I'm using:
>
> is_indexed :fields => [{:field => 'name', :as => 'playlist_name'}],
> :concatenate => [{ :class_name => 'Song', :field => 'name',
> :association_sql => "LEFT JOIN playlistings ON
> ((playlist_id=playlists.id)) LEFT JOIN songs ON
> (songs.id=playlistings.song_id)", :as => 'song' }]
>
> Hopefully that'll help someone out sometime. :)

Yeah! You help me with this post

--
Posted via http://www.ruby-forum.com/.

Manish Nautiyal

не прочитано,
3 дек. 2010 г., 09:04:1103.12.2010
– rubyonra...@googlegroups.com
Thanx for your information. Wasting half a day I found your post and
this help me so much.

Thanx a lot :)

Ответить всем
Отправить сообщение автору
Переслать
0 новых сообщений