我正在尝试将Ransack搜索保存到数据库中。我相信我应该只能存储params[:q]
值,然后在我想要回忆搜索时将其附加到搜索网址。不过,我不知道如何保存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]
导入我的数据库,以便稍后用于重新创建完整的搜索网址?
答案 0 :(得分: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
我在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
我在View with:
中创建了该已保存搜索的链接<%= link_to "Saved Search", search.query %>