2013-11-27 1 views
0

하나 (피드백) 한 2 키레일 : Sqlite : 두 개의 외래 키로 만 날짜를 만드는 방법? 내 데이터베이스 테이블의

class CreateFeedbacks < ActiveRecord::Migration 
    def change 
    create_table :feedbacks do |t| 
     t.string :strengths 
     t.string :weaknesses 
     t.string :recommendations 
     t.string :rating 
     t.integer :user_id 
     t.integer :subject_id 
     t.timestamps 
    end 
    end 
end 

에만 코드를 추가 한 subject.How에 대해 하나 개의 의견이 한 사용자에 내가 원하는

def create 

@feedback = Feedback.new(params[:feedback]) 
@feedback.user_id=current_user.id 
if @feedback.save 
    flash[:success] = "Welcome #{current_user.name}!" 
    redirect_to @feedback 
else 
    render 'new' 
end 

class FeedbacksController < ApplicationController 
    def new 

     @feedback = Feedback.new 
     #@user = Subject.find_all_by_teacher_id(current_user.id) 
     user_subject 

    end 

    def create 

    @feedback = Feedback.new(params[:feedback]) 
    @feedback.user_id=current_user.id 
    if @feedback.save 
     flash[:success] = "Welcome #{current_user.name}!" 
     redirect_to @feedback 
    else 
     render 'new' 
    end 
end 

def show 

    @feedback_user_all= Feedback.find_all_by_user_id(current_user.id) 

end 

def user_subject 

    @course = Course.find(current_user.course_id) 
    @subject = @course.subjects 
    end 
end 

답변

0

피드백 클래스에서 사용하십시오.

class Feedback < AR::Base 
    validates :user_id, uniqueness: {scope: [:subject_id]} 
end 

두 개의 다른 Feedback을 동일한 user_idsubject_id으로 저장하려고하면 오류가 발생합니다.

사용자가 자신의 제출을 ​​해결할 수 있도록, 다시 편집 양식을 렌더링하기 전에 @subject 및 @course를로드해야합니다 :

def create 
    @feedback = Feedback.new(params[:feedback]) 
    @feedback.user_id=current_user.id 
    if @feedback.save 
     flash[:success] = "Welcome #{current_user.name}!" 
     redirect_to @feedback 
    else 
     # Calling this method again should load the 
     # necessary instance variables for the form 
     # to work properly. 
     user_subject 
     render 'new' 
    end 
    end 
+0

어떻게 내 컨트롤러로 수행하는 방법을 나는 피드백이 사용자에게 말하고 싶어 생성되어 "새"페이지로 돌아갑니다 – user3000770

+0

그게 정확히 당신 질문에있는 것입니다. 두 개의 피드백이 동일한 user_id와 subject_id를 가지면'if @ feedback.save'는 false를 반환 할 것이고, 그 경우에 '새로운'페이지를 렌더링 할 것입니다. –

+0

, 그것은 말한다 : 정의되지 않은 메서드 전무에 대한 '지도' 9 : <% = f.collection_select (: subject_id, @subject : 아이디, 이름 (라인 # 9 정도) NilClass 추출 소스) %> – user3000770

관련 문제