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=&region=&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.

Reply via email to