2016-04-09 5 views
0

私のビューまたは私のルートのlink_toコードに問題があります。私は、ビューからプライマリキー以外の値を渡して、その値を使用してクエリを実行しようとしています。私が何をしていても、常にそのテーブルのIDを唯一のパラメータとして取ります。ここで 他の値をルーティングするRails 4のID:

は、私の見解である

<td> <%= link_to c.app_version_id, compliance_suite_path(:app_version_id => c.app_version_id) %></td> 

マイルート

resources :suites, :only => [:index] do 
member do 
    get 'report' 
end 
    member do 
    get 'compliance', param: :app_version_id 
end 

エンド

私は熊手ルートをすれば、私は取得

/スイート/ GET compliance_suite:ID /コンプライアンスを(。:format)スイート#compatibility {:param =>:app_version_id}

ここで

私が使用しているコントローラ内の他の方法持っている今、ちょうどベビーカーリストに

 def compliance 

    Rails.logger.info "***********PARAMS PARAMS *******************" 
    Rails.logger.info {params.inspect} 
    end 

を表示しようとしている私のコントローラである:私はちょうど私が別の値を使用したい、この一つの方法を持っているIDをクエリを実行するアプリケーションのバージョンID。だから私は、コントローラ全体がこの他のIDを1つの方法で使うことを望まない。私が望む価値は私の見解で、私はそれを私のテーブルで見ることができます。私のコントローラでは、常に:idと決してapp_version_id。

私のルートか自分のlink_toですか?

+0

あなたは '追加しました:コントローラーで許可されるのparamsにapp_version_id'? – lusketeer

答えて

1

あなたのルートはネストされたメンバールートであるため、railsは親のIDを期待しています。実際にあなたのルートにparams句を含める必要はありません。ルートにapp_version_idを含めることで、意図を反映するためにルートを変更する方がよいでしょう。

routes.rbを

get 'suite/:app_version_id/compliance', to: 'suites#compliance', as: 'compliance_suite' 
+0

コンプライアンスパスがネストされていないように私のルートを分離する必要がありますか? – ducati1212

+0

コントローラアクションに親インスタンスが必要かどうかは、それを行う方法の1つです。あなたのリンクには、唯一のパラメータとしてapp_version_idが含まれます。私が含まれているコードは、既存のルートからparam句を引いたもの、つまりメンバはコンプライアンス終了を取得します。 – margo

+0

再読した後、私はそれをネストされたルートと同じ方法で置き換え、2つの値をlink_to経由で渡しましたが、私はapp_versionを取得しますが、urlのようにurlを使って自動的にリダイレクトしたいので - > Started GET " /スイート/ 13 /コンプライアンス?app_version_id = 9 " - 13はアプリのIDのアプリのバージョンIDは9です。私はコントローラからリダイレクトするコードがないので、私の推測はルートですか? app_version_idに基づいてこの/スイート/ 9 /準拠が必要であることを修正できますか – ducati1212

関連する問題