2014-10-03 5 views
-1

나는 작업 사용자 테이블이 있습니다.레일 : 새로운 모델 던져 오류에 대한 참조

rails generate model quiz_answers 

.. 그리고 실행 레이크 dB : 나는 사용하여 새 테이블을 생성 한 마이그레이션을

내 CreateQuizAnswers 마이그레이션 파일은 다음과 같습니다 : 나는 quiz_answer 모델이

class CreateQuizAnswers < ActiveRecord::Migration 
    def change 
    create_table :quiz_answers do |t| 
     t.references :user, index: true 
     t.string :answer1 
     t.string :answer2 
     t.string :answer3 
     t.string :answer4 
     t.string :answer5 
     t.string :answer6 
     t.string :answer7 
     t.string :answer8 

     t.timestamps 
    end 
    end 
end 

:

class QuizAnswer < ActiveRecord::Base 
    belongs_to :user 
end 

및 QuizAnswersController :

class QuizAnswersController < ApplicationController 
    def new 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 

    private 

    def post_params 
     params.require(:quiz_answer).permit(:body, :user_id) 
    end 
end 

내가 추가 한 : quiz_answers을 편집 routes.rb

에 리소스로 질문 :

내가 양식을 (고안를 사용하여) 빌드 할 때 왜, 그때, 내가 할 "undefined method`body '... (여기에서 QuizAnswer에 대한 참조와 함께) 오류가 발생합니까?" 나는이 오류를 생성하지 않고 'body'속성을 가지고 있지 않은 또 다른 모델 'Post'를 가지고있다.

get "whattypeofleader" => "home#whattypeofleader" 

을 그리고 내 HomeController에서 내가 가진 :

내가 양식을 구축하기 위해 노력하고있어 페이지가 routes.rb에 내가 가진 가정/whattypeofleader.html.erb하고

class HomeController < ApplicationController 
    def index 
    end 

    def whattypeofleader 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 
end 

내가 뭘 잘못하고 있니? 도움이 필사적으로 감사, 감사합니다.

아, 그리고 경우에 당신이 그것을 필요로 여기에 양식 코드입니다, whattypeofleader에 '렌더링'가도록 부분을 :

<%= form_for([current_user, @quiz_answer]) do |f| %> 
    <p> 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 
    </p> 
    <p> 
    <%= f.submit("Save entry") %> 
    </p> 
<% end %> 
+2

사용자 모델에 has_many 연관을 추가 했습니까? – Mandeep

+0

has_many : quiz_answers가 있습니다.다음 RB – moosefetcher

+3

@moosefetcher 당신이 current_user.quiz_answers.build''싶지는 -, –

답변

0
<%= form_for([current_user, @quiz_answer]) do |f| %> 
    #... 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 

당신은 여기 text_area을 작성, 당신은에 레일을 말해 이 텍스트 영역 입력을 @quiz_answer.body 속성으로 바인드하십시오. 왜?

form_for은 배열의 마지막 요소를 양식의 개체로 지정합니다. 이 객체 (f.object)에 대한 참조를 유지하는 양식 작성기 객체 (f)를 생성합니다. 이 양식 빌더로 작성된 모든 필드는 자동으로 f.object.send(:field_name)의 값으로 채워집니다 (필드의 이름도 설정되므로 게시 할 때 쉽게 매개 변수를 일치시킬 수 있습니다). 레일즈 마술로 모든 폼 필드에 모델의 데이터가 채워집니다.

모델에 body 속성이 없으므로 (데이터베이스에 이러한 열이없고 해당 이름이 정의 된 메서드가 없음) f.object.send(:body)method undefined 오류를 발생시킵니다.

수정 사항에 대해서는이 양식의 모양을 결정해야합니다. 귀하의 모델에는 8 개의 열, answer<i>이 포함되어 있습니다 (걱정스러운 점이 있고 여기에서 연관성을 사용하고 싶을 수도 있습니다).

+0

'posts'를 사용하는 작업 버전에서이 양식 코드를 복사했습니다. 'posts'의 경우에서 작동하므로 f.text_area를 테스트로 사용하고있었습니다. 나는 f가 FormBuider라는 것을 알고 있습니다 - 저는 OOP를 완전히 이해합니다. 레일스의 마법에 대해 이해하고 싶습니다. 'post'에 body : body 속성이 없어도 액세스 할 수있는 이유는 무엇입니까? 'quiz_question'은 그렇지 않습니다. 왜 내 테이블에 8 개의 열이 포함되어 있다고 '걱정'합니까? 제발 설명해 줘요. ​​이걸로 제 밧줄 끝까지 다가 가고 있어요. 감사. – moosefetcher

+0

@moosefetcher - 왜'posts'에는 body 속성이 없다고합니까? 게시물 테이블과 게시물 모델에 대한 스키마를 게시 할 수 있습니까? – BroiSatse

+0

OK - 'post'에는 마이 그 레이션 파일에 정의 된 body 속성이 있습니다. 이는 나에게 뉴스입니다. 그 파일을 가리켜 주셔서 감사합니다. 이제는 새로운 질문을 던져야 할 것 같습니다 : quiz_answers 테이블이 어떻게 작동해야하는지. 다시 한번 감사드립니다. – moosefetcher

관련 문제