为什么 form_for class 添加仅在我明确声明提交标签时才有效?

Why does form_for class addition only work when i explicitly declare a submit label?

我正在尝试在此 rails form_for 中设置表单元素的样式,但不断 运行 出现语法错误,我尝试的任何操作似乎都不起作用:

_form.html.erb:

<%= form_for(@todo_list) do |f| %>
  <div class="form-group">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="form-group">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div>
    <%= f.submit, html: {class: "btn btn-default btn-xs"} %>
  </div>
<% end %>

这只是给出了这个错误:

_form.html.erb:23: syntax error, unexpected tLABEL, expecting '=' ...buffer.append=( f.submit, html: {class: "btn btn-default btn... ...

class=class:html=> 的各种变体,传入 html => {:class => "form-horizontal"} 等等,似乎都给出了相同的语法错误。

唯一的例外是当我明确地将标签应用于提交操作时,例如;

<%= f.submit 'Save', class: "btn btn-default btn-xs" %>

然后 class 成功添加并且我的 bootstrap 样式有效。然而,这既没有找到主要问题也没有解决它,因为我不能使用 rails' form_for 提交操作的动态命名。

类 我申请 div 似乎工作正常,bootstrap 加载正常。谁能帮忙?谢谢

你得到这个错误是因为 submit 是一个函数,第一个参数是标签。您不能像在代码示例中那样编写 f.submit,

如果您想添加第二个参数,您至少需要提供 nil 作为标签。正确的做法是:

<%= f.submit nil, html: {class: "btn btn-default btn-xs"} %>

来自APIDock

submit(value=nil, options={}) public