-->

我如何保存洗劫搜索到数据库?(How can I save Ransack searches to

2019-08-08 07:29发布

我试图洗劫搜索保存到数据库中。 我相信我应该能够只存储params[:q]值,那么它添加到搜索网址时,我想回顾一下搜索。 我不知道如何保存params[:q]价值,虽然。

该洗劫创建网址是这样的:

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]到我的数据库,稍后用于重建全搜索网址?

Answer 1:

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


文章来源: How can I save Ransack searches to the database?