5

Ransack 検索をデータベースに保存しようとしています。params[:q]値を保存して、検索を思い出したいときにそれを検索 URL に追加できるはずだと思います。params[:q]ただし、値を保存する方法がわかりません。

Ransack が作成する URL は次のようなものです。

http://site.com/search?utf8=%E2%9C%93&q%5Bone%5D=something&q%5Btwo%5D=&q%5Bthree%5D=&q%5Blow_number%5D=0&q%5Bhigh_number%5D=300000&q%5Bfour%5D=&commit=Search

検索を保存するアクションへの私のルートは次のとおりです。

match 'users/:id/saved_search_add' => 'users#saved_search_add', :as => :saved_search_add

ビューでこのコードを使用すると:

<%= link_to('Save Search', saved_search_add_path(current_user, :q => params[:q])) %>

コントローラーで次のコードを使用します。

  def saved_search_add
    @saved_search = Search.create(:query => params[:q].to_hash, :user_id => @user.id)

    respond_to do |format|
      if @saved_search.save
        format.html { redirect_to(:back) }
      else
        format.html { redirect_to(:back) }
      end
    end
  end

次に、保存されるデータは次のとおりです。

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
one: ''
two: ''
three: ''
low_number: '0'
high_number: '300000'
four: ''

だから、データがデータベースに入るときに(そしておそらく出てくるときにも)何らかの方法でデータをフォーマットする必要があります...シリアル化について何か読んだことがありますが、うまくいきませんでした。

params[:q]データベースにアクセスして、後で完全な検索 URL を再作成するために使用するにはどうすればよいですか?

4

1 に答える 1

6

request.fullpathの代わりに使用することになりparams[:q]ました。

クエリをデータベースに保存するコードはUsersコントローラーにあります。

def saved_search_add
  @saved_search = Search.create(:query => params[:q], :user_id => current_user.id)

  respond_to do |format|
    if @saved_search.save
      format.html { redirect_to(:back) }
    else
      format.html { redirect_to(:back) }
    end
  end
end

ビューで使用して、検索クエリをUsersコントローラーに送信するコードは次のとおりです。

<%= link_to('Save Search', saved_search_add_path(current_user, :q => request.fullpath)) %>

クエリ値は、次のようにデータベースに保存されます。

/search?utf8=%E2%9C%93&q%5Bone%5D=something&q%5Btwo%5D=&q%5Bthree%5D=&q%5Blow_number%5D=0&q%5Bhigh_number%5D=300000&q%5Bfour%5D=&commit=Search

ビューに保存された検索へのリンクを次のように作成します。

<%= link_to "Saved Search", search.query %>
于 2013-01-27T23:03:34.663 に答える