相关疑难解决方法(0)

Ruby on Rails:在模型或数据库中验证是否更好?

通常更好的做法(以及为什么)验证模型或数据库定义中的属性?

对于(一个微不足道的)例子:

在用户模型中:

validates_presence_of :name
Run Code Online (Sandbox Code Playgroud)

与迁移相比:

t.string :name, :null => false 
Run Code Online (Sandbox Code Playgroud)

一方面,将其包含在数据库中似乎更能​​保证不会出现任何类型的坏数据.另一方面,将其包含在模型中会使事情更加透明,更易于理解,方法是将其分组到代码中.其余的验证.我也考虑过两者兼顾,但这似乎既不干,也不易维护.

database validation ruby-on-rails models

39
推荐指数
3
解决办法
5976
查看次数

如何查找未通过新验证的旧记录?

我最近在Rails应用程序中发现了与连接表中的重复条目相关的问题.该应用程序是教育性的,包括学生和练习模型.连接表记录了哪些学生分配了哪些练习.将练习多次分配给学生是没有意义的(即不应允许在连接表中重复的条目).

我通过在连接表中添加唯一性验证来部分修复问题(参见下面的最后一行代码).此验证将防止将来创建任何新的重复条目.但是,我仍然面临着解决表中现有重复项的问题.

有没有办法对整个现有数据库运行新验证,以检索不再有效的所有记录?

class Student < ActiveRecord::Base
  has_many :student_exercise_assignments
  has_many :exercises, :through => :student_exercise_assignments
end

class Exercise < ActiveRecord::Base
  has_many :student_exercise_assignments
  has_many :students, :through => :student_exercise_assignments
end

class StudentExerciseAssignment < ActiveRecord::Base
    belongs_to :student
    belongs_to :exercise
    validates :exercise_id, :uniqueness => { :scope => :student_id, :message => "An exercise can only be assigned to a student once" }
Run Code Online (Sandbox Code Playgroud)

UPDATE

Shioyama在下面的回答给出了我正在寻找的信息.作为一个Rails的新手,虽然我有点被他利用的困惑&&:invalid?.如果有人需要&Ruby 中的运算符的引子,那么这里有一个很好的.

ruby-on-rails

4
推荐指数
1
解决办法
649
查看次数

标签 统计

ruby-on-rails ×2

database ×1

models ×1

validation ×1