如何将Ransack搜索保存到数据库?

我正在尝试将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 

如果我在视图中使用此代码:

  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?

我最后只使用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 

我在View中用来将搜索查询发送到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 %>