未定义的方法[model] _url

问题描述 投票:8回答:1

我正在处理嵌套资源项目,并在我的步骤控制器中收到错误:

  def create
    @step = Step.new(step_params)

    respond_to do |f|
      if @step.save
        f.html { redirect_to @step, notice: 'Step was successfully created.' }
        f.json { render action: 'show', status: :created, location: @step }
      else
        f.html { render action: 'new' }
        f.json { render json: @step.errors, status: :unprocessable_entity }
      end
    end
  end

我得到的错误是:

undefined method `step_url' for #<StepsController:0x007feeb6442198>

我的路线看起来像这样:

root 'lists#index'

resources :lists do
  resources :steps
end
ruby-on-rails-4 ruby-1.9.3
1个回答
14
投票

在使用嵌套资源时,请更新create操作,如下所示:

  def create
    @list = List.find(params[:list_id])
    @step = @list.steps.build(step_params) ## Assuming that list has_many steps

    respond_to do |f|
      if @step.save
        ## update the url passed to redirect_to as below
        f.html { redirect_to list_step_url(@list,@step), notice: 'Step was successfully created.' }
        f.json { render action: 'show', status: :created, location: @step }
      else
        f.html { render action: 'new' }
        f.json { render json: @step.errors, status: :unprocessable_entity }
      end
    end
  end

运行rake routes查看可用的路线。作为步骤#show的路线看起来像

GET lists/:list_id/steps/:id steps#show

使用带有2个参数的list_step_url @list用于:list_id和@step for:id to to show page of Step。

© www.soinside.com 2019 - 2024. All rights reserved.