2017-01-09 163 views
0

我遇到了問題,我已經做了一些研究,從我的研究中我發現正在使用的變量是空的,但我不確定它爲什麼是空的,也許這對其他人來說顯而易見?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

回答

1

我的問題解決了,謝謝你的建議,我用錯變量,我用@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

相關問題