Searchlogic и: has_many,: through => - PullRequest
2 голосов
/ 11 июня 2010

Я использую Searchlogic для поиска по многим полям в базе данных. Одним из этих полей является отношение: has_may,: through =>, и я не могу заставить его работать.

Вот соответствующие части моделей:

Source.rb:

class Source < ActiveRecord::Base
  has_many :authorships
  has_many :authors, :through => :authorships
end

Authorship.rb:

class Authorship < ActiveRecord::Base
  belongs_to :source
  belongs_to :author
end

Author.rb:

class Author < ActiveRecord::Base
  has_many :authorships
  has_many :sources, :through => :authorships
end

Тогда, на мой взгляд, у меня есть:

<% form_for @search do |f| %>
  <fieldset><legend>Search the Online Medieval Sources Bibliography</legend>

    <% f.fields_for @search.conditions do |sources| %>
      <%= sources.hidden_field :live_not_null %>

      <p>
        Text Name:
         <%= sources.text_field :text_name_like, :size => 95 %>      <br />
        <% sources.fields_for :author do |authors| %>
          Medieval Author:
          <%= authors.text_field :name_like, :size => 90 %>
        <% end %>  <br />
        Modern Editor/Translator:    
     <%= sources.text_field :editor_like, :size => 80 %>         <br />
      </p>
    <% end %>
  </fieldset>
<p>
  <%= f.submit "Search" %>
</p>
<% end %>

Страница поиска загружается просто отлично, но нажатие кнопки «отправить» выдает мне следующую ошибку:

 Searchlogic::Search::UnknownConditionError in SourcesController#index

The author is not a valid condition. You may only use conditions that map to a named scope

Вот код из SourcesController:

класс SourcesController

 def index
  query = if params[:search] then 
    params[:search][:hash]
    end
   @search = Source.search(query)
   @sources = @search.all
 end

А вот параметры:

Параметры: {"commit" => "Поиск", "поиск" => {"hash" => {"text_name_like" => "canterbury", "date_begin_greater_than_or_equal" => "", "author" => { "name_like" => ""}, "editor_like" => "", "link_not_blank" => "0", "trans_none_not_null" => "0", "trans_other_not_null" => "0", "trans_english_not_null" => " 0 "," trans_french_not_null "=>" 0 "," region_like "=>" "," live_not_null "=>" "," app_facsimile_not_null "=>" 0 "," date_end_less_than_or_equal "=>" "}," order "= > ""}}

У кого-нибудь есть идеи о том, что здесь происходит? Вам нужно больше сообщений об ошибке?

Большое спасибо!

1 Ответ

0 голосов
/ 18 октября 2010

Я тоже сталкивался с этим ограничением на searchlogic.есть «взлом» решения, которое я получил.это действительно просто.поиск предметов, которые вы ищете по модели соединения.это даст вам идентификаторы моделей, которые имеют этот поиск.это немного странно, но это самое близкое решение, которое я мог бы вам предложить.надеюсь это поможет.:)

...