2016-07-16 26 views
0

我的錯誤說:nested_scaffold URLGenerationError

沒有路由匹配{:動作=> 「新」,:ADVERTISER_ID => 「2」, :控制器=> 「分析」:EXPERIMENT_ID =>零}缺少必需的鍵: [:EXPERIMENT_ID]

錯誤發生在

應用/視圖/分析/ index.html.erb:29:在 `_app_views_analyses_index _html_erb___267178907_46340268'

指向這段代碼在我的index.html.erb

<%= link_to 'New Analysis', new_advertiser_experiment_analysis_path(params[:experiment_id]) %> 

錯誤也顯示了參數傳遞爲:

參數:{「ADVERTISER_ID 「=>」9「,」experiment_id「=>」2「}

不知道爲什麼它告訴我它不知道experiment_id。

這裏是我的分析控制器

class AnalysesController < ApplicationController 
    before_action :set_analyses 
    before_action :set_analysis, only: [:show, :edit, :update, :destroy] 


    # GET experiments/1/analyses 
    def index 
    @analyses = @experiment.analyses 
    end 

    # GET experiments/1/analyses/1 
    def show 
    end 

    # GET experiments/1/analyses/new 
    def new 
    @analysis = @experiment.analyses.build 
    end 

    # GET experiments/1/analyses/1/edit 
    def edit 
    end 

    # POST experiments/1/analyses 
    def create 
    @analysis = @experiment.analyses.build(analysis_params) 

    if @analysis.save 
     redirect_to([@analysis.experiment, @analysis], notice: 'Analysis was successfully created.') 
    else 
     render action: 'new' 
    end 
    end 

    # PUT experiments/1/analyses/1 
    def update 
    if @analysis.update_attributes(analysis_params) 
     redirect_to([@analysis.experiment, @analysis], notice: 'Analysis was successfully updated.') 
    else 
     render action: 'edit' 
    end 
    end 

    # DELETE experiments/1/analyses/1 
    def destroy 
    @analysis.destroy 

    redirect_to experiment_analyses_url(@experiment) 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_analyses 
     @experiment = Experiment.find(params[:experiment_id]) 
    end 

    def set_analysis 
     @analysis = @experiment.analyses.find(params[:id]) 
    end 

    # Only allow a trusted parameter "white list" through. 
    def analysis_params 
     params.require(:analysis).permit(:conversion, :aov, :win_loss, :notes) 
    end 

end 
+0

爲什麼你在你的視圖代碼中添加_advertiser_? –

回答

0

從當前的代碼它表明你有資源三級嵌套。 e-g:

resources :advertiser do 
    resources :experiment do 
    resources :analysis 
    end 
end 

因此路由new_advertiser_experiment_analysis_path需要兩個ID。一個用於advertiser,另一個用於experiment,所以你只是傳遞了一個單獨的ID,它被認爲是advertiser_id(它遵循我們提供ID的順序,如果沒有明確地通過散列提到的話),所以它得到零,這就是爲什麼它失敗。 所以你需要

<%= link_to 'New Analysis', new_advertiser_experiment_analysis_path(advertiser_id: params[:advertiser_id] , experiment_id: params[:experiment_id]) %> 

檢查Rails Nested Routing的完整指南。

相關問題