【问题标题】:rails association limit record based on an attribute基于属性的rails关联限制记录
【发布时间】:2016-03-25 16:00:39
【问题描述】:

您可以在下面的架构中看到,用户可以通过 course_completion 创建课程并为其提交时间和视频(如 youtube)。
我想做的是将用户的课程完成限制为 1 个,给定课程并基于属性“pov”(观点)
例如,对于“高海拔比赛”课程,用户只能拥有一个 pov=true 和/或一个 pov=false 的 course_completion
这意味着在创建课程完成时我必须检查它是否已经存在,并且在更新时我还必须检查它并销毁以前的记录(或更新它)。

我不知道我是否对我想要做的事情足够清楚,这可能是因为我不知道如何使用 rails 4 正确地做到这一点(除非使用大量代码行进行无用检查)。 我想把所有东西都放在一个 course_completion(normal_time、pov_time、normal_video、pov_video)中,但我不太喜欢这个主意:/

有人可以帮我解决这个问题吗?
感谢您的帮助!

这是我的课程:

class CourseCompletion < ActiveRecord::Base
  belongs_to :course
  belongs_to :user
  belongs_to :video_info

  # attribute pov
  # attribute time
end

class Course < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :courses
  has_many :course_completions
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 associations primary-key limit


    【解决方案1】:

    您可以使用 validates 唯一性和作用域 Rails - Validations

    class CourseCompletion < ActiveRecord::Base
      belongs_to :course
      belongs_to :user
      belongs_to :video_info
    
      validates :course, uniqueness: { scope: :pov, message: "only one course per pov" }
    
      # attribute pov
      # attribute time
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2018-09-01
      • 2017-11-05
      相关资源
      最近更新 更多