首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nested_scaffold URLGenerationError

nested_scaffold URLGenerationError
EN

Stack Overflow用户
提问于 2016-07-16 20:22:53
回答 1查看 36关注 0票数 0

我的错误是:

没有匹配{: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中的这段代码。

代码语言:javascript
复制
<%= link_to 'New Analysis',  new_advertiser_experiment_analysis_path(params[:experiment_id]) %>

此错误还显示正在传递的参数如下:

参数:{"advertiser_id"=>"9",“experiment_id”“=>”2“}

不知道为什么它告诉我它不知道experiment_id。

这里是我的分析控制器

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-16 20:54:23

从当前代码中可以看出,您有三个级别的资源嵌套。e-g:

代码语言:javascript
复制
resources :advertiser do 
  resources :experiment do 
  resources :analysis
  end 
end

因此,路由new_advertiser_experiment_analysis_path需要两个ids。一个用于advertiser,另一个用于experiment,因此您只是传递单个id,它被认为是advertiser_id (它遵循我们提供id的顺序,如果没有通过散列来解释的话),所以对于experiment_id它得到零,这就是失败的原因。所以你需要

代码语言:javascript
复制
<%= link_to 'New Analysis',  new_advertiser_experiment_analysis_path(advertiser_id: params[:advertiser_id] , experiment_id: params[:experiment_id]) %>

检查Rails嵌套路由以获得完整的指南。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38415286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档