2

Railsアプリケーションにリストのリストを表示するページがあります(will_paginateを使用してページ分割されています)。このページのリストを使用して検索と並べ替えを実装するための優れた宝石を見つけようとしています。ランサックの宝石は私が必要としていたもののように見えましたが、問題が発生しています。これは、私のコードがRansackgemで現在どのように見えるかです。

私のモデル(モデル全体が含まれていなかった、検証と余分なコードが邪魔にならないようにしたかった):

UNRANSACKABLE_ATTRIBUTES = ["id", "state", "show_email", "email", "show_phones", "primary_phone", "secondary_phone", "updated_at", "user_id"]

def self.ransackable_attributes auth_object = nil
  (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys
end

私のコントローラーのアクション:

def index
  @search = Listing.search(params[:q])
  @listings = @search.result.paginate(page: params[:page], per_page: 20, joins: "LEFT OUTER JOIN attachments ON listings.id = attachments.attachable_id", select: "listings.*, COUNT(attachments.id) AS photos", group: "listings.id", order: "listings.created_at DESC, listings.title ASC, listings.id DESC")
  @search.build_sort if @search.sorts.empty?
end

ページ上の私の検索フォーム:

    <div class="advanced-search">
        <%= search_form_for @search do |f| %>
            <div class="search-by">
                <div class="search-field">
                    <%= f.label :title_cont, "Title Contains" %>
                    <%= f.text_field :title_cont %>
                </div>
                <div class="search-field">
                    <%= f.label :description_cont, "Description Contains" %>
                    <%= f.text_field :description_cont %>
                </div>
                <div class="search-field">
                    <%= f.label :price_gteq, "Price Between" %>
                    <%= f.text_field :price_gteq %>
                    <%= f.label :price_lteq, "and" %>
                    <%= f.text_field :price_lteq %>
                </div>
            </div>
            <div class="sort-by">
                <%= f.sort_fields do |s| %>
                    <%= s.sort_select %>
                <% end %>
            </div>
            <div class="search-actions">
                <%= f.submit "Search" %>
            </div>
        <% end %>
    </div>

私のルート:

resources :listings do
  collection do
    match 'search' => 'listings#index', via: [:get], as: :search
  end
end

これですべてが整ったので、アプリケーションでリストを正常に検索および並べ替えることができました。

私の質問:このsort_selectフィールドには、「略奪可能」なすべてのオプションが表示されています。1つの属性を検索に使用できるようにするが、並べ替えには使用できないようにする方法はありますか?たとえば、属性を検索する機能が必要descriptionですが、その属性を並べ替えに含めるのは意味がありません。一方で属性を使用し、もう一方では使用しないようにするにはどうすればよいですか?助けてくれてありがとう、そして私の質問が十分に明確でないなら私に知らせてください。

4

1 に答える 1

0

ドロップダウンに必要な値を取得する方法がわからなかったため、代わりにリンクを使用しました。これが私がソートのために最終的に得たものです。

Sort by <%= sort_link @search, :title %> | <%= sort_link @search, :price %> | <%= sort_link @search, :created_at, "Date Listed" %>
于 2013-02-16T23:07:35.313 に答える