我有一个数据库表,其中有一列是项目的模型请求。项目是一个数组。当用户提交表单时,我需要一个验证来确保数组在被允许提交之前不是空的(即,至少有一个项目被选中)。验证在Rails(非HABTM)中至少选择了一个check_box
我发现如果项目是一个属于请求的模型,但是如果项目只是请求中的一列,那么该如何做到这一点。下面是我的最好的尝试,但它不工作,因为我得到了一个错误'你需要提供至少一个验证
型号代码
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
查看表单代码
<%= f.check_box(:item, {:multiple => true}, "#{item}") %>
控制器代码
def create
@requestrecord = Request.new(request_params)
end
private
def request_params
params.require(:request).permit({:item => []})
end
顺便说一句,你有'item'的复选框,': item'在许可证中,但是正在访问模型代码中的'items' ....我建议将它们都称为“物品”以减少混淆。你正在谈论一系列物品......所以将它们命名为'物品' –
啊所以我解决了这个问题,但是在相反的情况下,我决定调用所有物品,因为这是数据库中的表格。但后来,正如我在下面的其他评论中写的,self.item.blank?没有通过错误,但也没有实际做检查 – james
是的 - 它会在单个项目和多个项目之间混淆。更好地解决它的方式,这是真正明智的;) –