在 Rails 中,是否建议使用表单助手?在内部,一切都归结为纯 html,那么为什么不直接编写 html 呢?编写直接 html 的性能显然会比使用帮助程序更好。使用表单助手是像约定还是 Rails 开发人员必须遵循的东西?
5 回答
定义性能。你的表现还是应用?假设您有相同的 rhtml 片段分布在您的视图中。假设您在数千个地方都有它。也许你甚至没有在所有地方都得到完全相同的结果。现在您的客户想要更改此设置(可能是不同的演示顺序等)。在所有视图中执行此操作需要一段时间,对吗?很可能你不会第一次就做对了。事实上,您可能会在几年内不断收到错误报告,这些错误报告会出现在您错过更改的地方。
客户最终会为获得的“性能”付出很多。也许数百个工作小时。如果您在原则上避免 DRY 原则,可能会成千上万。想想她可以为这些工作时间购买的所有服务器和所有 RAM。如果她把所有的钱都花在硬件上,她的应用程序的运行速度可能会快上百倍。想想你可以使用的所有有趣的东西,而不是胡乱改变 html 片段。
我认为表单助手反映了 DRY(不要重复自己)原则。与其编写相同的代码来完成类似的任务,不如创建一个允许您重用该代码的表单助手。这样,如果您需要进行更改或修复,您只需在一个地方进行。它还有助于使您的代码更加紧凑和可读,以将复杂的操作抽象为表单助手。部分视图也是如此,尽管部分视图倾向于封装比表单助手更复杂的标记。
表单助手对于让 rails 处理基于您的模型创建表单特别有用。引用 API 文档的示例:
以下代码
<% form_for :person, @person, :url => { :action => "create" } do |f| %>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= submit_tag 'Create' %>
<% end %>
生成这个 html
<form action="/persons/create" method="post">
<input id="person_first_name" name="person[first_name]" size="30" type="text" />
<input id="person_last_name" name="person[last_name]" size="30" type="text" />
<input name="commit" type="submit" value="Create" />
</form>
您可以自己编写 html,但是通过使用表单助手,您必须减少键入内容并减少表单创建对 rails 实现的依赖。当您点击提交按钮时,您总是会得到一个将数据写入模型的表单。如果 Rails 开发人员改变了它的实现,你会自动从你的助手那里得到正确的 html 输出。如果您手动编写了 html,则必须更新所有内容以反映 rails 内部工作的变化。
当开发人员具有相同的类名称,id 并且输入字段没有值时,如果他需要不同的名称 id 并且还给出值,那么他必须编写<%= text_field_tag "name", :value=>"value" , :id=>"id" ,:class=>""class %>并且对于相同的 html 可以是< input type ="text" value ="value" class="class" name ="name" id="id "/> 现在考虑开销1.将第一个助手评估为 html 2.现在还要考虑助手中的长度,我们还必须编写 : , => 3.有时您忘记使用 : 或 ,错误地,所以我认为在这种情况下我们更喜欢 html 如果您的服务器收到大量请求,那么它会变得太忙并且响应时间将增加,因为 <%= %> 应该必须执行
这是一个非常古老的问题,但我是一个新手。我会争辩说,而不是写这个
<label class="input-group__label" for="email">Email</label>
<input class="input-group__field" id="email" type="email" name="email" placeholder="e.g. me@something.com">
像这样用 rails helpers 写同样的东西
<%= label_tag 'email', nil, class: 'input-group__label' %>
<%= email_field_tag "email", nil, placeholder: "e.g. me@something.com", class: "input-group__field" %>
in aform_tag
是一种非常干燥的做事方式。第一个可读性更好。大家可以理解。不需要 Rails 知识。不评估和转换特定于 Rails 的标签(性能略有提高)。代码量是一样的。如果那是在form_for
从模型创建表单的内部,我了解特定于 Rails 的标签和助手的使用。这说得通。但是我没有看到像上面的示例中那样对简单的 html 使用 rails 助手的真正优势。