使用Rails的form_for但在<form>元素上设置自定义类,属性?


89

form_for似乎忽略了任何“额外”属性,例如data-foo属性或在其第二个参数中class传递的属性options

= form_for @user, {:url => 'foo', :class => 'x', 'data-bar' => 'baz' } do |f|
  # ...

输出是<form>没有x类或data-bar属性的标签。

解决办法是什么?

或者,如何在FormBuilder不使用实例的情况下获取实例form_for

Answers:


191

使用:html哈希:

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} do |f|

要么

= form_for @user, html: {class: 'x', data: { bar: 'baz' } } do |f|

1
我发现这不起作用:= form_for @user, :html => {'class' => 'x'} do |f|class应该是符号而不是字符串。
Trantor Liu

11

Rails 4.0.3,Ruby 2.1.0p0->这对我有用=>

<%= form_for(@contact, :html => {:class => 'form_height'}) do |f| %><% if     @contact.errors.any? %>

4

我遇到了同样的问题,但感到困惑的是,我的应用程序中其他位置的另一种形式也能正常工作。

我意识到,我不小心加了的form_for另一个内部的form_for曾经除去固化的问题。

其次,我应该补充一点,此语法在Rails 4.2中对我适用:

<%= form_for @type, html: {class: "form-horizontal"} do |f| %>

我发现它比此处其他答案的标点符号汤更可取(它们可能基于较旧的Rails版本)。



1

我没有运气尝试了上面的方法,但是找到了解决方案。我正在使用Rails 4.1.6。

这没用

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

这确实

= form_for @user, html: {:class => 'x', 'data-bar' => 'baz'} %>

注意html选项的不同之处,希望对您有所帮助


3
哇塞!真的么?这些应该是完全等效的。您可以重现吗?您正在使用哪个版本的Ruby?
艾伦·H。

@Alan H.使用Ruby 2.1.3p242 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> 这是我的代码应用类的唯一方法,否则它将被忽略。
doz87 2014年

这两行完全相同。猜猜你忘了存钱吗?
nathanvda 2015年

我知道,应该。对我来说,那只是行不通。储蓄不是问题。
doz87
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.