2014-08-31 1 views
0

업데이트 : 나는 바보입니다. 질문 컨트롤러 대신 사용자 컨트롤러에 @answers를 추가했습니다. 이제 내가 보여주고있는 질문 컨트롤러로 바꿨습니다. 제출 오류가 발생하지만이를 파악할 수없는 경우 새 스레드를 시작합니다.라우팅 문제가 있습니까? 레일스 양식의 첫 번째 인수에 nil을 포함하거나 비워 둘 수 없습니다.

나는 몇 가지 관련 질문을 읽고 성공없이 해결책을 시도했다. 내 경로 설정을 잘못 설정했는지 궁금합니다. 이것은 내가 얻는 오류입니다 :

First argument in form cannot contain nil or be empty on line 5 

여기 내 양식 코드입니다. 답변 양식이지만 특정 질문 아래의 질문 색인 페이지에 표시됩니다. <와 ApplicationController

def index 
    @answers = Answer.all 
end 

def new 
    @answer = Answer.new 
end 

def create 
    @answer = Answer.new(answer_params) 

    if @answer.save 
    redirect_to root 
    else 
    render 'new' 
    end 
end 

private 

def answer_params 
    params.require(:answer).permit(:answer, :users_id, :questions_id) 
end 
+0

는 소리이 당신의 QuestionsController 사물의 소리에 의해이보기를 (렌더링되는 컨트롤러에 @answer 설정보기를 떠날 수 있을까? –

+1

폼 매개 변수가 응답 컨트롤러에 오기를 기대하고 있습니다. 왜 '대답'/ '새 질문 = 인덱스'및 '게시'응답 => '질문 # 인덱스'경로가 있습니까? – Mandeep

+0

@FrederickCheung - 현재 DB에 답변이 없으므로이 양식은 추가 할 수 있습니다. 그래서 네, 맞지 않나요? – MandyM

답변

1

을 할 수 없다 form_for하는 첫 번째 인수를

클래스 AnswersController : 여기

resources :answers 
get 'answers/new' => 'questions#index' 
post 'answers' => 'questions#index' 

내 answers_controller 정보입니다 : 여기
<%= form_for @answer do |answer| %>    <<< LINE GENERATING ERROR 
    <%= answer.label :answer, "What do you think?" %> 
    <%= answer.text_area :answer %> 
    <%= answer.button %> 
<% end %> 

내 라우팅 정보입니다 nil - 레일은 당신이 원하는 것을 말할 수 없다. 대답을 reate (인스턴스 변수는 @answer 호출 할 수 있지만, 단지 값으로 전달 된 변수의 이름을 모르는에 대한 양식)이 같은 경우

을, 가장 쉬운

<%= form_for Answer.new do %> 
    ... 
<% end %> 
같은 것입니다 그것이 -

은 다른 방법은 변경되지 않고는 무기 호입니다 @answer을 알려주는 것처럼

관련 문제