Rails: 如何根据按下的提交按钮有条件地要求表单的字段?

Rails: How to conditionally require a form's field based on which submission button is pressed?

我正在使用 HAML 和 Rails 处理表单。除了通常的 'Submit' 按钮之外,我还添加了一个 'Save as Draft' 按钮,但需要一些字段仅在提交时才需要。如何根据用户是否单击提交或保存为草稿来使 'form.input... required:' 属性成为条件?部分 HAML 代码:

= form.input :title, example: t('.example.title'), maxlength: 50, required: true

%button.pull-left.btn.btn-primary.btn-lg{type: 'submit'}= t('.save')
%button.btn.btn-lg{type: 'draft'}= t('.draft')

表单提交后的部分控制器代码:

def create
if params[:submit]
  submit_proposal
elsif params[:draft]
  save_draft
...

但是,尝试在此控制器区域中添加条件为时已晚,因为表单已经禁止提交,并在字段旁边显示 "This field is required." 消息。

显而易见的答案是不要求仅在提交时需要的那些,然后在用户提交时检查它们是否存在。
更复杂的方法是为 2 个函数使用 2 个不同的端点,一个需要所有参数,一个需要一个子集。
更复杂的是接受参数子集,然后添加自定义 javascript 以检查它是否提交或保存草稿,只有在所有参数都存在时才继续提交。