我在视图中有3个text_fields
,我在其中输入学生姓名。当然你可以输入一个学生或三个学生,但我想确保至少有一个学生被提供,因为一个项目必须有一个学生分配给它。
以下是我的观点:
<%= form_for @project, url: projects_path do |f| %>
<p>
<%= f.label :name, "Name" %>
<%= f.text_field :name %>
</p>
<p>
<%= f.fields_for :students do |s| %>
<%= s.label :name %>
<%= s.text_field :name %>
<% end %>
</p>
<p>
<%= f.submit "Submit" %>
</p>
<% end %>
来自Projects控制器的和new
方法:
def new
@project = Project.new()
3.times do
student = @project.students.build
end
end
我想要达到的目的是检查是否提供了至少一名学生,如果不是仅显示提醒或禁用提交。
此项目中使用的模型:
class Student < ActiveRecord::Base
belongs_to :project
end
class Project < ActiveRecord::Base
has_many :students
accepts_nested_attributes_for :students
validate :validate_student_count
def validate_student_count
errors.add(:students, "at least one is required") if students.count < 1
end
end
答案 0 :(得分:2)
互联网上有很多非常相似的问题。以下是一些示例:Validate the number of has_many items in Ruby on Rails和Validate that an object has one or more associated objects
答案 1 :(得分:1)
只需将自定义验证规则添加为:
validate :validate_student_count
def validate_student_count
errors.add(:students, "at least one is required") if students.count < 1
end