Rails未定义的方法*为零:NilClass
问题描述:
我遇到了问题,我已经做了一些研究,从我的研究中我发现正在使用的变量是空的,但我不确定它为什么是空的,也许这对其他人来说显而易见?Rails未定义的方法*为零:NilClass
我想显示从另一个控制器的页面上嵌套的窗体,我使用嵌套的资源,我认为这可能是我的问题,但不确定如何解决它。
收到以下错误:
undefined method `submission' for nil:NilClass
项目 主文件夹 - 成员 --Questions --Submissions
概念的结构:
问题 - 的has_many - 提交 提交 - belongs_to的 - 问题
提交型号:
class Submission < ActiveRecord::Base
belongs_to :question
belongs_to :member
end
问题型号:
class Members::Question < ActiveRecord::Base
has_many :submissions
end
提交控制器:
def create
@question = Members::Question.find(params[:question_id])
@submission.member_id = current_member.id
@submission = @question.submissions.create(params[:submission].permit(:content, :question_id))
*Redirect Method Here *
end
在表单我使用下面的方法:
<%= form_for([@question, @question.submission.build]) do |f| %>
<% if @submission.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@submission.errors.count, "error") %> prohibited this submission from being saved:</h2>
<ul>
<% @submission.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :content %><br>
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
然后显示问题的显示页面的表单中,我使用
<%= render 'members/submissions/form' %>
路线:
namespace :members do
resources :questions, only: [:index,:show] do
resources :submissions
end
end
任何一个任何想法,我哪里会出错?
任何帮助表示赞赏。
答
我的问题解决了,谢谢你的建议,我用错变量,我用@question,当由于其嵌套的,正确的变量是@members_question
提交控制器
def create
@members_question = Members::Question.find(params[:question_id])
@submission = @members_question.submissions.create(params[:submission].permit(:content, :question_id))
@submission.member_id = current_member.id
end
_form.html.erb
<%= form_for([@members_question, @members_question.submissions.build]) do |f| %>
<div class="field">
<%= f.label :content %><br>
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
+0
变量的名字是绝对不相关的,它只是在控制器和表单中匹配。 – Iceman
是你的控制器返回这里的对象? '@question = Members :: Question.find(params [:question_id])'..在那行后面做一个'@ question.inspect'来找出 – sa77
你在视图中有错字'@ question.submission.build' should是'@ question.submissions.build' – MikDiet
@MikDiet我已经尝试了两种,都没有工作。 – user7391609