我有一个应用程序,用户必须填写所有调查问题(每个问题下面的单选按钮)。当用户只回答一个问题时,我从视图中获得的示例参数是:
{"answer_11"=>"", "answer_12"=>"", "answer_16"=>"", "answer_9"=>"Velit assumenda id.", "answer_10"=>""}我知道我应该在表单中使用required选项,但它不适用于我的简单表单视图:
<%= 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 %>创建操作
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如果用户没有回答所有问题,如何编写这样的验证以防止创建新记录?
发布于 2021-04-14 00:25:19
查看该模型(TestResult)的DB模式会很有帮助。我假设它有一个存储散列{"answer_11"=>"", "answer_12"=>"", "answer_16"=>"", "answer_9"=>"", "answer_10"=>""}的json或以某种方式序列化的名为answer的字段。并且要求验证是否没有空值。您可以在TestResult模型中进行以下验证(假设TestResult#answer返回答案散列)
validate :no_blank_answers
def no_blank_answers
if answer.values.any?(&:blank?)
errors.add(:answer, "cannot have blank answers")
end
end没有在IRB中测试过,但应该可以工作。
发布于 2021-04-13 21:36:24
您可以为TestResult模型编写验证器。
validates :answer, presence: true -如果您的结果没有答案(字段将为空),这将返回一个错误,您可以在@test_result.errors上看到他的
https://guides.rubyonrails.org/active_record_validations.html
https://stackoverflow.com/questions/67075797
复制相似问题