0

Problème: Je veux avoir seulement 1 UserLesson par utilisateur et par vidéo parce que je suis la construction d'un système de suivi (système de progression) L'utilisateur doit être en mesure de voir combien cours sont RESTANT leçon/leçon totale et aussi lorsque marqué comme complété ajoutera cssValide enregistrement unique par utilisateur et par leçon // Rails 4

J'envoie les données de la vue sur le contrôleur:

<%= link_to 'Mark as completed', user_lessons_path(@user_lesson, user_lesson: {user_id: current_user.id, lesson_id: @lesson.id}), :method => :post, class: 'btn btn-primary-big' %> 

le contrôleur reçoit des données et lancer la méthode de création

class UserLessonsController < ApplicationController 
    before_filter :set_user_and_lesson 

    def show 
    end 

    def create 
    @user_lesson = UserLesson.create(user_lesson_params) 
    if @user_lesson.save 
     flash[:success] = "You rock! Keep up ;)" 
     redirect_to(:back) 
    else 
    flash[:success] = "You have already completed this lesson" 
    redirect_to(:back) 
    end 
end 

    private 

    def user_lesson_params 
     params.require(:user_lesson).permit(:user_id, :lesson_id, :completed) 
end 
end 

Voici la relation modèle

class UserLesson < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :lesson 
    # validates_uniqueness_of :user_lesson, :scope => [:user, :lesson] 
    end 

class Lesson < ActiveRecord::Base 
    has_one :lecture, through: :chapter 
    belongs_to :chapter 
end 

class User < ActiveRecord::Base 
    has_many :enrollments 
    has_many :user_lessons 
    has_many :lectures, through: :enrollments 
    accepts_nested_attributes_for :enrollments 
end 

class Enrollment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :lecture 
    validates :lecture, uniqueness: { scope: :user, message: "should happen once per user" } 
end 

class Lecture < ActiveRecord::Base 
    belongs_to :category 
    has_many :lessons, through: :chapters, dependent: :destroy 
    has_many :chapters 
    belongs_to :teacher 

    # For course user relationship 
    has_many :enrollments 
    has_many :users, through: :enrollments 

    accepts_nested_attributes_for :enrollments 
    accepts_nested_attributes_for :chapters 
end 

class Chapter < ActiveRecord::Base 
    has_many :lessons 
    belongs_to :lecture 
    accepts_nested_attributes_for :lessons 
end 

Je suppose était de valider l'unicité de la leçon utilisateur par utilisateur et leçon. Cependant, ne peut pas sembler fonctionner a reçu le message d'erreur.

+0

Quel est le message d'erreur? – usmanali

+0

Undefined user_lesson dans le contrôleur – AdrienNhm

+0

pouvez-vous coller la ligne entière? – usmanali

Répondre

1

Ajouter cette validation à votre modèle pour garantir l'unicité par la portée de l'utilisateur:

validates :lesson_id, :uniqueness => {:scope=>:user_id}