Rails如何使这个视图工作?具有课程

时间:2015-06-10 15:44:34

标签: ruby-on-rails model-view-controller devise

如何修改视图以使其正常工作?我想要一个"立即注册按钮"这将为current_user创建一个seen_lessons记录?

class Course
    has_many :lessons
end

class Lesson
  #fields: course_id
  belongs_to :course
end
class User
  has_many :viewed_lessons
  has_many :viewed_courses
end
class ViewedLesson
  #fields: user_id, lesson_id, completed(boolean)  
  belongs_to :user
  belongs_to :lesson
end
class ViewedCourse
  #fields: user_id, course_id, completed(boolean)  
  belongs_to :user
  belongs_to :course  
end



class CoursesController < ApplicationController
  def index
    @courses = Course.all
  end



def show
    @course = Course.find(params[:id])
    current_user.viewed_courses.create(course: @course)
  end  
end

一个问题是,每次查看页面时都会创建一个新的查看过的课程,你需要一些逻辑才能只添加一门课程。

也许是这样的:

def show
  @course = Course.find(params[:id])
  current_user.viewed_courses.create(course: @course) unless ViewedCourse.exists?(user_id: current_user.id, course_id: @course.id)
end

感谢您帮助我。

1 个答案:

答案 0 :(得分:0)

在模型中,您可以validate for uniqueness ...

<强> viewed_course.rb

class ViewedCourse
  ...
  validates :course, uniqueness: { scope: :user, message: "should happen once per user" }
  ...
end

您的展示模板中似乎没有使用ViewedCourses。如果您以后再做,可能需要在某些情况下尝试the find_or_create_by method

最后一条未经请求的反馈,你的措辞对我来说似乎有点混乱。 “注册”和“显示”感觉就像是两种截然不同的动作。