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 

任何一个任何想法,我哪里会出错?

任何帮助表示赞赏。

+0

是你的控制器返回这里的对象? '@question = Members :: Question.find(params [:question_id])'..在那行后面做一个'@ question.inspect'来找出 – sa77

+2

你在视图中有错字'@ question.submission.build' should是'@ question.submissions.build' – MikDiet

+0

@MikDiet我已经尝试了两种,都没有工作。 – user7391609

我的问题解决了,谢谢你的建议,我用错变量,我用@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