首页 > 解决方案 > nil:NilClass 在rails中的未定义方法“错误”

问题描述

我已经创建了项目脚手架和舞台脚手架。我在项目的显示页面上呈现了一个按钮,以打开一种舞台形式。但我没有得到任何方法错误。我想将 project_id 传递给创建的阶段。我在项目和阶段之间有一对多的关联。 错误

项目控制器.rb

  def index
    @projects = current_user.projects.all.paginate(page: params[:page], per_page: 15)
  end

  def show
    @project=Project.find(params[:id])
    @stages = Stage.all
  end

stage_controller.rb

  def index
    @stages = Stage.all
  end

  def show
  end

  def new
    @stages = Stage.new
    @project = Project.find(params[:project_id])
  end


  def create
    @project = Project.find(params[:project_id])
    @stage = @project.stages.build(stages_params)

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

路线.rb

  resources :projects do
    resources :stages
  end

模型项目.rb

has_many :stages

耙路线

             Prefix Verb   URI Pattern                                                                              Controller#Action
                    tasks GET    /tasks(.:format)                                                                         tasks#index
                          POST   /tasks(.:format)                                                                         tasks#create
                 new_task GET    /tasks/new(.:format)                                                                     tasks#new
                edit_task GET    /tasks/:id/edit(.:format)                                                                tasks#edit
                     task GET    /tasks/:id(.:format)                                                                     tasks#show
                          PATCH  /tasks/:id(.:format)                                                                     tasks#update
                          PUT    /tasks/:id(.:format)                                                                     tasks#update
                          DELETE /tasks/:id(.:format)                                                                     tasks#destroy
           project_stages GET    /projects/:project_id/stages(.:format)                                                   stages#index
                          POST   /projects/:project_id/stages(.:format)                                                   stages#create
        new_project_stage GET    /projects/:project_id/stages/new(.:format)                                               stages#new
       edit_project_stage GET    /projects/:project_id/stages/:id/edit(.:format)                                          stages#edit
            project_stage GET    /projects/:project_id/stages/:id(.:format)                                               stages#show
                          PATCH  /projects/:project_id/stages/:id(.:format)                                               stages#update
                          PUT    /projects/:project_id/stages/:id(.:format)                                               stages#update
                          DELETE /projects/:project_id/stages/:id(.:format)                                               stages#destroy
                 projects GET    /projects(.:format)                                                                      projects#index
                          POST   /projects(.:format)                                                                      projects#create
              new_project GET    /projects/new(.:format)                                                                  projects#new
             edit_project GET    /projects/:id/edit(.:format)                                                             projects#edit
                  project GET    /projects/:id(.:format)                                                                  projects#show
                          PATCH  /projects/:id(.:format)                                                                  projects#update
                          PUT    /projects/:id(.:format)                                                                  projects#update
                          DELETE /projects/:id(.:format)                                                                  projects#destroy

项目 show.html.erb

<%= link_to "Add Stage", new_project_stage_url(@project), :class=>"button primary small" %>

更新错误

标签: ruby-on-railsruby-on-rails-4ruby-on-rails-5

解决方案


我认为您有一个错误,因为在您的新方法中,您正在设置一个名为 @stages 的变量

def new
  @stages = Stage.new
  @project = Project.find(params[:project_id])
end

但在您看来,您使用的是一个名为@stage 的变量。

只需在您的控制器方法#new 中将@stages 更改为@stage,您可能会像这样:

def new
  @stage = Stage.new
  @project = Project.find(params[:project_id])
end

在你看来:

<% if @stage.errors.any? %>

推荐阅读