2015-01-22 2 views
0

하나의 속성을 제외하고 모두 저장하는 양식이 있습니다. : user_id (외래 키)는 nil로 계속 나오게됩니다. 이것은 새로운 주석을 만들기위한 형식이며, 문제의 일부일 수있는 # show file에 있습니다. 다른 속성 (: name 및 : impression_id)은 괜찮은 것으로 보입니다. 나는 다음과 같은 한의 comments_controller에서서식 하나의 속성을 저장하지 못했습니다

def show 
    @impression = Impression.find(params[:id]) 
    @play = Play.find_by(id: @impression.production.play_id) 
    @production = Production.find_by(id: @impression.production_id) 
    @comments = Comment.where(impression_id: @impression.id) 
    @comment = Comment.new 
end 

:

def new 
    @impression = Impression.find(params[:impression_id]) 
    @comment = Comment.new(comment_params) 
    authorize @comment 
end 

def create 
    @comment = Comment.new(comment_params) 
    authorize @comment 
    if @comment.save 
    flash[:notice] = 'You have successfully added a comment.' 
    redirect_to :back 
    else 
    flash[:notice] = 'Please try again.' 
    render :new 
    end 
end 

private 

def comment_params 
    params.require(:comment).permit(:body, :impression_id, :user_id) 
end 

당신이 볼 수 있듯이

= form_for @comment do |f| 
    = f.label 'Add Comment' 
    %br 
    = f.text_area :body, placeholder: 'Comment', cols: 50, rows: 3 
    %br 
    = f.hidden_field :impression_id, :value => @impression.id 
    = f.hidden_field :user_id, :value => current_user.id 
    %br 
    = f.submit "Save" 

impressions_controller의 관련 섹션은 다음과 같습니다

폼의 , 나는 user_id에 current_user.id의 값을 할당하려고 시도하고 있지만 취하지는 않습니다. 아무도 내가 누락 된 것을 볼 수 있습니까?

내 impressions 컨트롤러에 comment_params를 추가하려고했지만 param 주석이 비어 있다는 오류 메시지가 표시됩니다. . .

감사합니다.

답변

0

첫 번째 확인 current_user current_user의 값이 올 바르면 주석 테이블에 user_id를 저장해야합니다.

+0

내 current_user에는 값과 ID가 있습니다. . . 그것은 단지 저축하지 않습니다 : 새로운 코멘트에 대한 user_id! –

0

사용자가 로그인하지 않은 경우 current_user는 nil입니다.

은 어쩌면 숨겨진 필드는 코멘트 subhash 내부 user_id를 전송하지 ... 사용자가 질문에 대답하기 위해

+0

내 사용자가 로그인했으며 ID가 있습니다. –

0

에 로그인되어 있는지 확인합니다. 매개 변수를 확인하고 확인하십시오. comment_params 메소드는 주석 서브 상자 안에있을 것으로 기대합니다.

이 매개 변수를 어떻게 확인합니까?

어느 쪽이든 당신은 레일 4.2을 사용하는 경우에 ... https://gorails.com/episodes/rails-4-2-introduction 약 4 분

또는 ...

당신의 gemfile에

확인하여 레일의 각 양식의 제출 후 콘솔 또는 보면, 컨트롤러 대구 서버에서 재시작하여 레일 다음

와 (터미널)에서

group :development do 
    gem 'better_errors' 
    gem 'binding_of_caller' 
end 

번들 넣어 전자, CURRENT_USER는 오류가 발생, 라인 raise "oops"을 입력 존재하는 코드를 실행해야합니다 라인에서, 다음 콘솔 볼 http://localhost:3000/__better_errors로 이동

이, 콘솔가 포함 된 오류 페이지를 줄 것이다 당신이 할 수있는 변수 이름 (params, current_user, 뭐든)을 입력하고 값을 확인하십시오.

+0

이것은 모두 훌륭한 소리! 불행히도 필자는 주석 컨트롤러에 넣은 "raise"행의 런타임 오류가 발생하며 오류 페이지 나 콘솔을 보지 못합니다. 그들이 어디에 있을까요? –

+0

당신은 아주 새로운 오류 페이지가 있어야합니다. 그러나 당신이 better_errors와 binding_of_caller를 설치하고 개발중인 경우에만. 그런 다음 레일 서버를 번들하고 다시 시작해야합니다. 이 일이 일어나서 스크린 샷을 보내 드리겠습니다. 대기. – dwilbank

+0

네, 저도 그랬지만, * 새로운 오류 페이지는 어디에 있습니까? 미리보기에 계속 표시되는 현재 오류 페이지를 대체 할 예정입니까? –

관련 문제