ใช้ form_for ของ Rails แต่ตั้งค่าคลาสที่กำหนดเองแอตทริบิวต์ใน <form> องค์ประกอบ?


91

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อย่างไร

คำตอบ:


195

ใช้: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? %>

5

ฉันมีปัญหาเดียวกัน แต่รู้สึกงงงวยว่ารูปแบบอื่นในแอปของฉันทำงานได้ดี

ฉันตระหนักว่าฉันได้เพิ่มform_forภายในform_forอื่นโดยไม่ได้ตั้งใจซึ่งเมื่อนำออกไปแล้วสามารถรักษาปัญหาได้

ประการที่สองฉันควรเพิ่มว่าไวยากรณ์นี้ใช้ได้กับฉันใน Rails 4.2:

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

ฉันคิดว่ามันดีกว่าสำหรับเครื่องหมายวรรคตอน - น้ำซุปของคำตอบอื่น ๆ ที่นี่ (ซึ่งอาจอ้างอิงจาก Rails เวอร์ชันเก่ากว่า)


1

สำหรับผู้ช่วยเหลือส่วนใหญ่อาร์กิวเมนต์สุดท้ายคือแฮชของอ็อพชัน html สำหรับองค์ประกอบ

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

คุณยังสามารถตรวจสอบทางเลือกอื่น ๆ ในเอกสารประกอบActionsView :: Helpers :: FormHelper


1

ฉันลองข้างต้นโดยไม่มีโชค แต่พบวิธีแก้ปัญหา ฉันใช้ราง 4.1.6

สิ่งนี้ไม่ได้ผล

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

สิ่งนี้ได้

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

สังเกตความแตกต่างด้วยตัวเลือก html หวังว่านี่จะช่วยได้


3
ว้าวจริงหรือ? สิ่งเหล่านี้ควรจะเทียบเท่ากันทุกประการ คุณสามารถทำซ้ำสิ่งนี้? คุณใช้ Ruby รุ่นไหนอยู่?
Alan H.

@Alan H. การใช้ Ruby 2.1.3p242 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> นี่เป็นวิธีเดียวที่รหัสของฉันจะใช้กับคลาสมิฉะนั้นจะเพิกเฉยต่อมัน
doz87

สองบรรทัดนั้นเหมือนกันทุกประการ เดาว่าคุณลืมบันทึกระหว่าง?
nathanvda

ฉันรู้ว่าพวกเขาควรจะเป็น สำหรับฉันมันก็ไม่ได้ผล การประหยัดไม่ใช่ปัญหา
doz87
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.