必须至少填写一个text_field

时间:2013-12-18 22:31:30

标签: ruby-on-rails ruby ruby-on-rails-4 textfield

我在视图中有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

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

只需将自定义验证规则添加为:

  validate :validate_student_count

  def validate_student_count
    errors.add(:students, "at least one is required") if students.count < 1
  end