Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4-在父显示页面上使用嵌套资源进行搜索_Ruby On Rails_Ruby On Rails 4_Ransack - Fatal编程技术网

Ruby on rails Rails 4-在父显示页面上使用嵌套资源进行搜索

Ruby on rails Rails 4-在父显示页面上使用嵌套资源进行搜索,ruby-on-rails,ruby-on-rails-4,ransack,Ruby On Rails,Ruby On Rails 4,Ransack,因此,在我的应用程序中,客户端有许多站点,我的路由和控制器嵌套在客户端下,它们都出现在显示页面上(代码如下) 我想做的是实现一个搜索表单,并对客户端显示页面上的链接进行排序,这样用户就可以搜索相关的站点 当前,当我创建与客户端关联的站点时,无论站点与哪个客户端关联,它都会显示所有客户端的所有站点 我的路线: resources :clients, controller: 'clients' do resources :sites, controller: 'clients/sites

因此,在我的应用程序中,客户端有许多站点,我的路由和控制器嵌套在客户端下,它们都出现在显示页面上(代码如下)

我想做的是实现一个搜索表单,并对客户端显示页面上的链接进行排序,这样用户就可以搜索相关的站点

当前,当我创建与客户端关联的站点时,无论站点与哪个客户端关联,它都会显示所有客户端的所有站点

我的路线:

  resources :clients, controller: 'clients' do
    resources :sites, controller: 'clients/sites', except: [:index]
  end
客户端控制器/显示操作

 class ClientsController < ApplicationController 
      def show
        @client = Client.find(params[:id])

        @q = Site.ransack(params[:q])
        @sites = @q.result(distinct: true).page(params[:page]).per(5)
      end
end
class客户端控制器
我的模型:

class Client < ApplicationRecord
 has_many :sites, dependent: :destroy
end 

class Site < ApplicationRecord
 belongs_to :client
end
类客户端
客户端/show[:id]页面上的我的搜索表单和排序链接

<%= search_form_for @q do |f| %>
 <%= f.search_field :site_ident_or_site_name_cont, :class => 'form-control', :placeholder => 'search client...' %>
<% end %>

<%= sort_link(@q, :site_name, 'Site Name') %>

“表单控件”,:占位符=>“搜索客户端…”%>

我想做的是只搜索与正在显示的客户端关联的站点。我们将非常感谢您的帮助

我不熟悉ransack,但我猜您应该使用关联来确定搜索范围,例如:

  def show
    @client = Client.find(params[:id])

    # scope by just the sites belonging to this client
    @q = @client.sites.ransack(params[:q])
    @sites = @q.result(distinct: true).page(params[:page]).per(5)
  end

所以这个解决方案是一个两部分的解决方案,多亏了塔林·伊斯特(Taryn East)在上面的回答,他帮我解决了这个问题

控制器的作用剂量需要按照她的建议确定范围,如下所示:

  def show
    @client = Client.find(params[:id])

    # scope by just the sites belonging to this client
    @q = @client.sites.ransack(params[:q])
    @sites = @q.result(distinct: true).page(params[:page]).per(5)
  end
然后对搜索表单进行一些修改:

<%= search_form_for @q, url: client_path(params[:id]) do |f| %>
 <%= f.search_field :site_name_cont, :class => 'form-control', :placeholder => 'search client...' %>
<% end %>

“表单控件”,:占位符=>“搜索客户端…”%>

这解决了问题

因此,我得到了{NoMethodError at/clients/1未定义的方法'sites_path',用于#你是说?asset_path}好吧,所以我找到了答案!你的帖子让我开始了,搜索表单也需要做一些更改。谢谢你的帮助!