Ruby on rails 对集合路径的调用会不断传递id

Ruby on rails 对集合路径的调用会不断传递id,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在编写的rails应用程序中有一个搜索方法。这里有一段摘录 其目的是使用正则表达式匹配描述与搜索查询匹配的所有项。然后,将所有匹配的项目ID作为字符串传递给另一个页面。(这一切都发生在搜索控制器中) 然后,item controller捕获该ID字符串,将其拆分为一个数组,并显示匹配对象的列表 然而,我目前遇到了一个问题,rails将redirect_附加到另一个参数语句(根据跟踪,它是{“id”=>“search”},然后正在搜索id为“:a1”的项)。它显然找不到一个(id都是数字),因

我正在编写的rails应用程序中有一个搜索方法。这里有一段摘录

其目的是使用正则表达式匹配描述与搜索查询匹配的所有项。然后,将所有匹配的项目ID作为字符串传递给另一个页面。(这一切都发生在搜索控制器中)

然后,item controller捕获该ID字符串,将其拆分为一个数组,并显示匹配对象的列表

然而,我目前遇到了一个问题,rails将redirect_附加到另一个参数语句(根据跟踪,它是{“id”=>“search”},然后正在搜索id为“:a1”的项)。它显然找不到一个(id都是数字),因此应用程序崩溃。有人知道为什么会这样吗

在搜索控制器中

rquery = Regexp.new(Regexp.escape(@query), Regexp::IGNORECASE)
item_list = []
Item.all.each{|item| item_list << item if rquery.match(item.shortdescr)} 

unless item_list == nil
    ids = ""

    maybe_matters.each do |matter|
        ids += item.id.to_s + " "
    end

    redirect_to search_items_path(ids: ids)
    return
end
def search
    authorize! :show, Item
    @id = params[:ids].split
    @search = []
    @id.each do |id|
      @search << id.to_i
    end

    @items = Item.accessible_by(current_ability).where(id: @search).order('completed desc nulls last').page params[:page]
end

我建议将
search
设置为GET请求。确保该操作的路径是
routes.rb中的收集操作。如果控制器名为
ItemsController

resources :items do
  get 'search', on: :collection
end
您可以将搜索参数作为URL参数传递:

GET/items/search?query=searchterm

编辑

刚刚在您的路由中实现了帖子。您无法重定向到帖子路径,这可能是您出现奇怪行为的原因。将搜索操作更改为GET,此问题将至少得到部分解决

另外,您是如何处理URL编码的?带有空格的字符将被编码为奇怪的值,如
%20
,这可能会在调用
参数[:id]之类的东西时产生意外的结果。拆分

如果可能,我建议将其整合到单个控制器操作中,而不是重定向

resources :items do
  get 'search', on: :collection
end