Ah... If you have_many :subjects, then your reference in your define_index block should be plural as well:
indexes subjects.name, :as => :subjects Or was that a typo in the email, but not the code? -- Pat On 04/11/2010, at 3:32 AM, Morgan Kay wrote: > Yes, I have. Any other suggestions? > > Thank you! > Morgan. > > On Nov 2, 11:41 pm, Pat Allan <[email protected]> wrote: >> Hi Morgan >> >> Have you run 'rake ts:rebuild' so Sphinx is aware of your changes? I can't >> spot anything immediately wrong with what you're doing. >> >> Cheers >> >> -- >> Pat >> >> On 03/11/2010, at 2:28 PM, Morgan Kay wrote: >> >>> Okay, so now I'm adding more search fields to this, and I'm having >>> trouble getting it to work. Eventually I am going to end up needing >>> to search on about 20 fields, and 7 of those are in related tables. >>> Some of them are has_many, and some are has_many, :through. >> >>> Here's what I've done so far with one of the has_many tables: >> >>> ------------------------------- >>> source.rb--------------------------------------------- >>> class Source < ActiveRecord::Base >>> has_many :subjects >> >>> define_index do >>> indexes :text_name >>> indexes :editor >>> indexes :region >>> indexes subject.name, :as => :subject >> >>> has created_at, updated_at >>> end >>> ------------------------------------------------------------------------------------------ >> >>> ------------------------- >>> sources_controller.rb------------------------------------- >>> class SourcesController < ApplicationController >>> def index >>> @sources = Source.search :conditions => field_conditions, :page >>> => params[:page] >>> end >> >>> def field_conditions >>> %w( text_name editor region subject ).inject({}) do |hash, field| >>> hash[field.to_s] = params[field] if params[field].present? >>> hash >>> end >>> end >>> ------------------------------------------------------------------------------------------- >> >>> ------------------------ >>> index.html.erb------------------------------------------------ >>> <% form_tag "", :method => :get do -%> >>> <fieldset><legend>Search the Online Medieval Sources Bibliography</ >>> legend> >>> Text Name: <%= text_field_tag :text_name %><br /> >>> Editor: <%= text_field_tag :editor %><br /> >>> County/Region: <%= text_field_tag :region %><br /> >>> Subject: <%= text_field_tag :subject %> >>> </fieldset> >>> <p> >>> <%= submit_tag "Search" %> >>> </p> >>> <% end -%> >>> ------------------------------------------------------------------------------------------- >> >>> If I put anything in the "Subject" search field, I get no results. So >>> now what should I be doing? >> >>> Thanks! >>> Morgan. >> >>> On Oct 28, 10:20 pm, Pat Allan <[email protected]> wrote: >>>> Hi Morgan >> >>>> With three fields, you're going to want to link each param to the >>>> appropriate field in your index. So, with that in mind, the code might >>>> look a little like the following: >> >>>> def index >>>> Source.search :conditions => field_conditions, :page => params[:page] >>>> end >> >>>> private >> >>>> def field_conditions >>>> %w( text_name editor region ).inject({}) do |hash, field| >>>> hash[field.to_s] = params[field] if params[field].present? >>>> hash >>>> end >>>> end >> >>>> This will build up the conditions hash only when there's actually text to >>>> search for in that field. >> >>>> Let me know if this isn't clear, or if you have more questions :) >> >>>> -- >>>> Pat >> >>>> On 29/10/2010, at 10:10 AM, Morgan Kay wrote: >> >>>>> I'm new to Thinking Sphinx, and have been a little stymied because >>>>> there aren't many tutorials out there. I have two search forms on my >>>>> site. One just searches one field, so that's super easy, and I have >>>>> that up and working just fine. The other is more difficult, because I >>>>> need to search several fields. I'm starting with just three for now. >> >>>>> Here's my model: >>>>> --------------------------------Source.rb---------------------------- >>>>> class Source < ActiveRecord::Base >> >>>>> define_index do >>>>> indexes :text_name >>>>> indexes :editor >>>>> indexes :region >> >>>>> has created_at, updated_at >>>>> end >> >>>>> end >>>>> -------------------------------------------------------------------------- >> >>>>> Here's the controller: >>>>> ------------------------Sources_controller.rb-------------------- >>>>> class SourcesController < ApplicationController >> >>>>> def index >>>>> @sources = Source.search( (params[:search] || ""), :page=> >>>>> (params[:page] || 1)) >>>>> end >> >>>>> ... >>>>> --------------------------------------------------------------------------- >> >>>>> And the view: >>>>> ------------------------index.html.erb------------------------------ >>>>> <% unless @sources.empty? %> >>>>> <div id="results"> >>>>> <%= render :partial => "results" %> >>>>> </div> >>>>> <% end %> >> >>>>> <% form_tag "", :method => get do -%> >>>>> <fieldset> >>>>> Text Name: <%= text_field_tag :text_name %><br /> >>>>> Editor: <%= text_field_tag :editor %><br /> >>>>> County/Region: <%= text_field_tag :region %> >>>>> </fieldset> >>>>> <%= submit_tag "Search" %> >>>>> <% end -%> >>>>> -------------------------------------------------------------------------- >> >>>>> I know that the problem is in my text_field_tags. On the form where I >>>>> am just searching one field, I have "text_field_tag :search", and that >>>>> works just fine, but when I am searching multiple fields, what >>>>> parameters should I put in the text_field_tag? >> >>>>> For what it's worth, when I do a search using this form, the URL >>>>> contains the right parameters (http://localhost:3000/sources? >>>>> text_name=canterbury&editor=®ion=&commit=Search), but it shows all >>>>> of the records, not just the ones that match the search criteria. >> >>>>> What do I need to be doing differently? >> >>>>> Thank you! >>>>> Morgan. >> >>>>> -- >>>>> You received this message because you are subscribed to the Google Groups >>>>> "Thinking Sphinx" group. >>>>> To post to this group, send email to [email protected]. >>>>> To unsubscribe from this group, send email to >>>>> [email protected]. >>>>> For more options, visit this group >>>>> athttp://groups.google.com/group/thinking-sphinx?hl=en. >> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Thinking Sphinx" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group >>> athttp://groups.google.com/group/thinking-sphinx?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Thinking Sphinx" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/thinking-sphinx?hl=en. > -- You received this message because you are subscribed to the Google Groups "Thinking Sphinx" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/thinking-sphinx?hl=en.
