【问题标题】:At least one text_field must be filled必须至少填写一个 text_field
【发布时间】:2014-01-07 07:41:09
【问题描述】:

我有 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

【问题讨论】:

  • 您没有告诉我们您遇到了什么问题,只告诉我们您想要达到的目标。
  • 我刚刚编辑了我的问题。

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


【解决方案1】:

互联网上有很多非常相似的问题。以下是一些示例:Validate the number of has_many items in Ruby on RailsValidate that an object has one or more associated objects

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 2014-10-16
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2022-01-13
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多