Rails text_field_tag id属性

时间:2014-02-25 18:12:54

标签: ruby-on-rails ruby forms input

我正在阅读Michael Hartl的Rails教程。 chapter 8的其中一项练习是使用form_tag而不是form_for重写代码。在查看了form_for给我的来源并在Rails文档中查找每个tag之后,我能够成功地将它组合在一起。

我的问题是:Rails如何知道id属性为<input>创建的text_field_tag标记,以便它与id匹配<label>label_tag之前创建的标记?

以下是表单的代码:

<%= form_tag(sessions_path) do %>

  <%= label_tag "session_email", "Email" %>
  <%= text_field_tag "session[email]" %>

  <%= label_tag "session_password", "Password" %>
  <%= password_field_tag "session[password]" %>

  <%= button_tag("Sign in", name: "commit", type: "submit") %>
<% end %>

以下是生成的html:

<form accept-charset="UTF-8" action="/sessions" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="c9a5KJveRSOQyDo/ckUtpmQAbjw2f1alnB6Dn1lu3XU=" /></div>

  <label for="session_email">Email</label>
  <input id="session_email" name="session[email]" type="text" value="{:id=&gt;&quot;session_email&quot;}" />

  <label for="session_password">Password</label>
  <input id="session_password" name="session[password]" type="password" value="{:id=&gt;&quot;session_password&quot;}" />

  <button name="commit" type="submit">Sign in</button>

1 个答案:

答案 0 :(得分:0)

请注意,从Rails 5.1开始,推荐使用的表单助手为form_with。 并且form_with不再像以前的idclass一样自动为DOM元素生成form_forform_tag

这对于添加像label这样的标记(这些标记用于会自动链接到其相应的输入字段)具有影响。 现在,要使标签正确地与输入字段配对(带有for属性),您需要明确id属性添加到输入。

示例

ERB:

<%= form_with model: User.new do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name, id: :user_name %>
<% end %>

生成HTML:

<form action="/users" method="post">
  <label for="user_name">Name</label>
  <input id="user_name" type="text" name="user[name]">
</form>

另请参见

https://medium.com/@tinchorb/form-with-building-html-forms-in-rails-5-1-f30bd60ef52d,特别是标题“不再有自动生成的ID和类”。