Я использую 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 "= > ""}}
У кого-нибудь есть идеи о том, что здесь происходит? Вам нужно больше сообщений об ошибке?
Большое спасибо!