首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails对必填字段的自定义验证

Rails对必填字段的自定义验证
EN

Stack Overflow用户
提问于 2021-04-13 21:26:26
回答 2查看 39关注 0票数 0

我有一个应用程序,用户必须填写所有调查问题(每个问题下面的单选按钮)。当用户只回答一个问题时,我从视图中获得的示例参数是:

代码语言:javascript
运行
复制
{"answer_11"=>"", "answer_12"=>"", "answer_16"=>"", "answer_9"=>"Velit assumenda id.", "answer_10"=>""}

我知道我应该在表单中使用required选项,但它不适用于我的简单表单视图:

代码语言:javascript
运行
复制
<%= simple_form_for :test_results, url: test_results_path  do |f| %>
  <% @randomize_questions.map do |q| %>
    <%= q[:question] %>
    <%= f.input "answer_#{q[:id]}", required: true, collection: q[:answers], as: :radio_buttons, value: { question: q[:question], answer: q[:answer]} %>
  <% end %>
  <%= f.button :submit %>
<% end %>

创建操作

代码语言:javascript
运行
复制
  def create
    @test_result = TestResult.new(
      answer: test_result_params,
    )
    @test_result.save
  end

  def test_result_params
    params.require(:appropriateness_test_results).permit!
  end

如果用户没有回答所有问题,如何编写这样的验证以防止创建新记录?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-14 00:25:19

查看该模型(TestResult)的DB模式会很有帮助。我假设它有一个存储散列{"answer_11"=>"", "answer_12"=>"", "answer_16"=>"", "answer_9"=>"", "answer_10"=>""}的json或以某种方式序列化的名为answer的字段。并且要求验证是否没有空值。您可以在TestResult模型中进行以下验证(假设TestResult#answer返回答案散列)

代码语言:javascript
运行
复制
validate :no_blank_answers

def no_blank_answers
  if answer.values.any?(&:blank?)
    errors.add(:answer, "cannot have blank answers")
  end
end

没有在IRB中测试过,但应该可以工作。

票数 1
EN

Stack Overflow用户

发布于 2021-04-13 21:36:24

您可以为TestResult模型编写验证器。

validates :answer, presence: true -如果您的结果没有答案(字段将为空),这将返回一个错误,您可以在@test_result.errors上看到他的

https://guides.rubyonrails.org/active_record_validations.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67075797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档