2016-10-04 8 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 at/clients/1 のための未定義のメソッド 'sites_path 'は#<#Class:0x007f863be58a58>:0x007f863ca6adc8> でしたか?平均? asset_path} –

+0

これでわかりました!あなたの投稿は、検索フォームにもいくつかの変更が加えられなければならないということになってしまった。ご協力いただきありがとうございます! –

関連する問題