cod*_*e4j 12 ruby activerecord ruby-on-rails
我有一个学生和一个课程模型.学生属于课程,课程有很多学生.
class Student < ActiveRecord::Base
attr_accessible :course_id, :name, :password, :status, :studentID, :year
belongs_to :course
validates :name, :password, :status, :studentID, :year, :presence =>true
validates_associated :course
end
class Course < ActiveRecord::Base
attr_accessible :courseCode, :courseName, :courseYr
validates :courseCode,:courseName,:courseYr, :presence => true
validates :courseCode,:courseYr, :uniqueness=>{:message=>"Cannot repeat the code"}
has_many :students
end
Run Code Online (Sandbox Code Playgroud)
在用于创建学生记录的表单中,我让用户输入课程ID.
<div class="field">
<%= f.label :course_id %><br />
<%= f.text_field :course_id %>
</div>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何验证course_id用户的输入.即使我键入不存在的课程ID,学生模型验证也不会生成错误.如何让它显示错误?
Chr*_*ers 18
您应该考虑创建自定义验证方法:
class Student < ActiveRecord::Base
validates :course_id, presence: true, numericality: { only_integer: true }
...
validate :validate_course_id
private
def validate_course_id
errors.add(:course_id, "is invalid") unless Course.exists?(self.course_id)
end
end
Run Code Online (Sandbox Code Playgroud)
首先,您的模型将确保它course_id是一个有效的整数,然后您的自定义验证将确保该课程存在于数据库中.