验证在 Rails 中至少选择了一个 check_box(非 HABTM)

jam*_*mes 1 forms validation checkbox ruby-on-rails

我有一个模型请求的数据库表,其中有一列是项目。项目是一个数组。当用户提交表单时,我需要进行验证以确保在允许他们点击提交之前数组不为空(即,至少检查了一项)。

如果 item 是属于 Request 的模型,我已经找到了如何执行此操作,但如果 item 只是 Request 中的一列,则不会。下面是我最好的尝试,但它不起作用,因为我收到一个错误`你需要提供至少一个验证

型号代码

class Request < ActiveRecord::Base
  serialize :item
  validates :must_have_one_item

  def must_have_one_item
    for item in @request.items
        errors.add(:base, 'You must select at least one item') if request.item.blank?
    end
  end
Run Code Online (Sandbox Code Playgroud)

查看表单代码

<%= f.check_box(:item, {:multiple => true}, "#{item}") %>
Run Code Online (Sandbox Code Playgroud)

控制器代码

def create
    @requestrecord = Request.new(request_params)
end

private
    def request_params
       params.require(:request).permit({:item => []})
    end
Run Code Online (Sandbox Code Playgroud)

zea*_*soi 5

自定义验证的正确调用如下:

validate :must_have_one_item
Run Code Online (Sandbox Code Playgroud)

请注意,自定义验证块是使用 调用的validate,而不是使用validates。根据文档validate执行以下操作:

向类添加验证方法或块。当覆盖验证实例方法变得过于笨拙并且您正在寻找更具描述性的验证声明时,这很有用。

validates再次从文档中将其与如何调用进行对比:

此方法是所有默认验证器和任何以“Validator”结尾的自定义验证器类的快捷方式。