ruby-on-rails - 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" %>
解决方案
我认为您有一个错误,因为在您的新方法中,您正在设置一个名为 @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? %>
推荐阅读
- javascript - JavaScipt 代码使用正则表达式替换给定字符串中的所有匹配词,但不在脚本标记内
- swift - 在不同的视图控制器中实现相同的内容而不创建额外的视图控制器
- python - 循环函数并自动生成字典
- firebase - React native -Firebase“错误:Reference.push 失败:第一个参数包含属性'messages.timestamp'中的未定义。”
- java - 如何在 AuditorAware 中获取 Keycloak 用户名
- node.js - AWS S3 文件上传
- python - 在 Pandas 中查找嵌套文档到数据框
- python - python中nlp的空间模型没有产生实体标签
- azure - Azure 文件共享的符号链接的替代方案
- python - Pandas:用另一列值填充 Pandas 数据框列中的字符串中的参数