2011-01-24 4 views
0

次のモデルがあります。結合テーブルはuser_idとcourse_idを参照し、その組み合わせは一意に設定されます。しかし、サーバー上で自分のページをテストした後、例えば他のcurrent_userと一緒にコースを何度も残したり参加したりして、私のjoinテーブルはcourse_idが空だったレコードを作成しました。その後、データを取得する際にエラーが発生しました。だから私は:false => nullを追加しようとしました。これは役に立ちますか?あなたの時間あなたはヌルIDでCourseEnrollmentを保存しようとすると例外が発生します:null => falseを追加レールに意図せぬNULLエントリを作成するテーブルを結合する

def self.up 
    create_table :course_enrollments do |t| 
    t.references :user, :null => false 
    t.references :course, :null => false 
    t.timestamps 
end 
    add_index :course_enrollments, [:user_id, :course_id], :unique => true 
end 
+0

コースに参加して離れるコードを投稿できますか?あなたの返信のために –

答えて

1

ためのTHX。例外を処理するためにコントローラアクションを記述するのは問題ありません。 CourseEnrollmentモデルにvalidates_presence_of :user_id, :course_idを追加することができます(また、そうする必要があります)。ヌルIDのインスタンスは有効ではなく、通常の<model>.saveメソッドで処理できます。

しかし、大きな問題は、アプリが最初にヌルIDを持つ行を保存する理由です。たとえば、孤立した行を作成している可能性があります(関連するコースまたはユーザーを削除します)。一般的には、これを防ぐためにをhas_manyの関連付けに追加することをお勧めします。

+0

thx! – daniel

関連する問題