我的错误是:
没有匹配{:action=>“新建”、:advertiser_id=>"2“、:controller=>”分析“的路由,缺少所需密钥的:experiment_id=>nil}::experiment_id
错误发生在
app/views/analyses/index.html.erb:29:in `_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发布于 2016-07-16 20:54:23
从当前代码中可以看出,您有三个级别的资源嵌套。e-g:
resources :advertiser do
resources :experiment do
resources :analysis
end
end因此,路由new_advertiser_experiment_analysis_path需要两个ids。一个用于advertiser,另一个用于experiment,因此您只是传递单个id,它被认为是advertiser_id (它遵循我们提供id的顺序,如果没有通过散列来解释的话),所以对于experiment_id它得到零,这就是失败的原因。所以你需要
<%= link_to 'New Analysis', new_advertiser_experiment_analysis_path(advertiser_id: params[:advertiser_id] , experiment_id: params[:experiment_id]) %>检查Rails嵌套路由以获得完整的指南。
https://stackoverflow.com/questions/38415286
复制相似问题