这个rails form_for的这个类有啥问题?

Posted

技术标签:

【中文标题】这个rails form_for的这个类有啥问题?【英文标题】:Whats wrong with this class addition to this rails form_for?这个rails form_for的这个类有什么问题? 【发布时间】:2015-10-20 11:30:36 【问题描述】:

我正在尝试在此 rails form_for 中设置表单元素的样式,但不断遇到语法错误,我尝试的任何方法似乎都不起作用,你能看到问题吗?

<%= 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=&gt; 等的各种变体似乎也会产生错误。

&lt;%= f.submit, class: "btn btn-default btn-xs" %&gt;

导致此错误:

SyntaxError in TodoListsController#edit ...... _form.html.erb:23: syntax error,unexpected tLABEL, expecting '=' ...uffer.append=( f.submit, class: "btn btn-default btn-xs" );@... ... ^

将“form-horizo​​ntal”传递给form_for 仍然会产生错误;

<%= form_for(@todo_list, html => :class => "form-horizontal")  do |f| %>
....
....
<%= f.submit, class: "btn btn-default btn-xs" %>

SyntaxError in TodoListsController#edit ... _form.html.erb:23: syntax error, unexpected tLABEL, expecting '=' ...uffer.append=( f.submit, class: "btn btn-default btn-xs" );@... ... ^

请注意,如果我明确声明了提交操作的标签,例如;

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

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

我应用于 div 的类似乎工作正常,引导程序加载正常。任何人都可以帮忙吗?谢谢

【问题讨论】:

你有一个额外的逗号:f.submit class: "btn btn-default btn-xs"(不要在f.submit 调用之后使用逗号)(或者最终将nil 作为第一个参数) @MrYoshiji 请提交您的评论作为答案,因为它是正确的。哦,天哪,经过数小时的研究,这是最小的事情!谢谢。 【参考方案1】:

这是一个拼写错误:您有一个额外的逗号:

f.submit, class: "btn btn-default btn-xs"
#       ^ extra comma

您应该使用以下内容:

f.submit nil, class: 'btn btn-default btn-xs'
#       ^ no comma

【讨论】:

【参考方案2】:

您忘记为提交按钮添加标签

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

编辑 另一种方法是重写按钮的默认值:

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

而且,我认为,这就是您要寻找的:

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

f.submit 后面没有逗号

【讨论】:

如果没有尝试添加类,表单可以在没有提交操作标签的情况下正常工作吗?但我现在会尝试使用标签。 添加标签并重启服务器 谢谢伊戈尔,这正在工作。你能帮我理解为什么没有额外的类和没有特别声明的标签事情就可以正常工作,但是一旦你添加了你需要声明标签的类?谢谢 我很高兴为您提供帮助,jbk! apidock.com/rails/ActionView/Helpers/FormBuilder/submit Igor,谢谢,很高兴能走出那个洞,但我现在意识到,以前的 rails form_for 会根据正在执行的操作自动命名提交按钮,而不是它不是并且只是被覆盖我声明的标签的所有表单用法。所以这种解决了一个问题但又创造了另一个问题,我怎样才能保留动态标签命名,同时还能将自定义类应用于元素你知道吗?【参考方案3】:

正如Umar所提到的,你的f.submitclas-s-reference is incorrect:

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

您还将受益于在表单中使用循环:

#form
<% options = [[:title, "text_field"],[:description, "text_area"]] %>
<%= form_for @todo_list do |f| %>
   <% options.each do |option| %>
      <%= content_tag :div, class: "form-group" %>
          <%= f.label option[0] %>
          <%= f.send(option[1], option[0]) %>
      <% end %>
   <% end %>
   <%= f.submit %>
<% end %>

【讨论】:

我已经按照@Umar 的建议和问题主体中的补充进行了尝试。还是不行:( 请在我的答案中查看我的最新更改,不要在 f.submit 中使用“html” 感谢 Rich,根据您和 Umar 的更改进行了编辑,不幸的是,根据已编辑的问题正文,仍然无法正常工作。 谢谢老兄,我已经输入了我要做什么【参考方案4】:

这样使用。

<%= form_for(@todo_list, :html => :class => "form-horizontal") do |f| %>

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

【讨论】:

不幸的是不起作用,在主要问题正文中添加了特定的错误消息。 啊,所以我必须在form_for的开头传递这样一个html引用? bootstrap form 指的是什么? (不像你上面写的那样工作。) 它将引导表单类应用于您的表单。我正在编辑我上面的答案。您可以应用该课程并查看更改:) 好奇怪,还是不行!?!; _form.html.erb:23: syntax error, unexpected tLABEL, expecting '=' ...uffer.append=( f.submit, class: "btn btn-default btn-xs" );@... ... ^ 您是否添加了这些更改? :class=> "form-horizo​​ntal") 做 |f| %>

以上是关于这个rails form_for的这个类有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5:form_for 与 form_with

Ruby on Rails 3 表单中的 _snowman 参数有啥用?

Rails 将 form_for 对象传递给部分

Rails:form_for 命名空间资源

在不同位置放置Rails Form_For字段

class.getClassLoader().getResource(xxx)是啥意思啊?最后这个xxx和这个类有啥关系?