0

Ransackを使用してアプリで検索を実行しています。ユーザーがテキストを入力する検索バーがあります。テキストは検索コントローラーに渡され、投稿とグループの2つのテーブルでクエリを検索します。

:name問題は、グループと:title投稿に対してそれぞれクエリを実行し、同じページで両方の結果セットを提供したいということです。検索フォームは:name_contを使用しているため、投稿で同じ検索を実行するときに、このフォームがコントローラーに送信するハッシュをコピーし、キーを:title_contに変更しようとしています。

説明を求めることを躊躇しないでください。

検索コントローラー

class SearchController < ApplicationController
  def index
    @q = Group.search(params[:q])
    @groups = @q.result
    @group_count = @groups.count

    #query = params[:q][:name_cont]
    posthash = { :q => {:title_cont => params[:q][:name_cont]} }
    @q = Post.search(posthash)
    @posts_results = @q.result(:distinct => true)
    @post_count = @posts.count

  end
end

検索フォーム:

=search_form_for @q, :url => { :controller => "search", :action => "index" }do |f|
  =f.text_field :name_cont
  =f.submit 'search'

それがもたらすエラー:

undefined method `name_cont' for #<Ransack::Search:0x007fc0f798df18>

更新1:

class SearchController < ApplicationController
  def index
    @q = Group.search(params[:q])
    @groups = @q.result
    @group_count = @groups.count

    #I am trying to take the query, i.e. the "value" in params[:q]
    #and pass it into a new hash to use as a parameter in 'search'
    posthash = { :q => {:title_cont => params[:q][:name_cont]} }

    @q2 = Post.search(posthash)
    @posts_results = @q2.result(:distinct => true)
    @post_count = @posts.count

  end
end
4

1 に答える 1

1

名前ではなくタイトルに応答する投稿を検索するためにオーバーライドしていますが@q、最終的に検索フォームは代わりにがを持たないオブジェクトを取得するname_contためtitle_cont、 以外の投稿を検索するには別の変数名を使用する必要があります@q

于 2013-01-02T00:48:45.833 に答える