2016-10-04 42 views
1

因此,在我的應用程序中,客戶端有很多網站,我的路由和控制器嵌套在客戶端,它們全都出現在顯示頁面上(代碼如下)。Rails 4 - 在父節目頁面上使用嵌套資源的Ransack使用

我試圖達到的目標是在客戶端顯示頁面上實現Ransack搜索表單和排序鏈接,以便用戶可以搜索關聯的網站等。

目前,當我創建與客戶端相關聯的站點時,它顯示所有客戶端的所有站點,而不管站點與哪個客戶端相關聯。

我的路線:

resources :clients, controller: 'clients' do 
    resources :sites, controller: 'clients/sites', except: [:index] 
    end 

客戶端控制器/ show動作

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 Client < ApplicationRecord 
has_many :sites, dependent: :destroy 
end 

class Site < ApplicationRecord 
belongs_to :client 
end 

我的搜索表單和排序的客戶端/顯示[鏈接: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') %> 

我想要做的只是搜索與正在顯示的客戶端關聯的網站。任何援助在這裏將不勝感激。

回答

1

因此,解決辦法是得益於泰倫東的回答2部分解決上述用於獲取滾球爲我滾!

控制器動作劑量必須先限定,如她曾建議,像這樣:

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 %> 

這解決了這一問題

2

我不熟悉的搜查,但我會猜你應該使用關聯範圍搜索例如:

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 
+0

所以我得到了{NoMethodError在/ clients/1 未定義的方法'sites_path'爲#<#:0x007f863ca6adc8> 你意思? asset_path} –

+0

好吧,我明白了!你的帖子讓我去那裏有一些需要做的搜索表單的變化。謝謝你的幫助! –