Searchlogic和:has_many,:through =>

时间:2010-06-10 21:04:16

标签: ruby-on-rails named-scope searchlogic

我正在使用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的代码:

class SourcesController&lt; ApplicationController中

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

以下是参数:

参数:{“commit”=&gt;“搜索”,“搜索”=&gt; {“hash”=&gt; {“text_name_like”=&gt;“canterbury”,“date_begin_greater_than_or_equal”=&gt;“”,“作者“=&gt; {”name_like“=&gt;”“},”editor_like“=&gt;”“,”link_not_blank“=&gt;”0“,”trans_none_not_null“=&gt;”0“,”trans_other_not_null“=&gt; ;“0”,“trans_english_not_null”=&gt;“0”,“trans_french_not_null”=&gt;“0”,“region_like”=&gt;“”,“live_not_null”=&gt;“”,“app_facsimile_not_null”=&gt;“ 0“,”date_end_less_than_or_equal“=&gt;”“},”order“=&gt;”“}}

有没有人对这里发生的事情有任何想法?您是否需要查看更多错误消息?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我也遇到过searchlogic的这个限制。我得到的解决方案有“黑客”。它真的很简单。 在连接模型中搜索您要查找的项目。这将为您提供具有该搜索的模型的ID。 这有点古怪,但它是我能为您提供的最接近的解决方案。 希望这可以帮助。 :)