如何在Rails Haml中渲染文本字段

时间:2018-07-03 16:10:53

标签: ruby-on-rails haml

我想显示带有特定参数的文本字段。当我使用:

%input{:type=>"text", :name => "search_name",:maxlenght => "200" ,:class => "text_field", :placeholder => t("homepage.save_search.save_field_placeholder") }

一切正常,生成的html是我想要的:

<input class="text_field" maxlenght="200" name="search_name" placeholder="Search name" type="text">

但是当我使用以下合成琴时:

=text_field :search_name, :maxlenght => "200", :class => "text_field", :placeholder => t("homepage.save_search.save_field_placeholder")

它生成以下html:

<input type="text" name="search_name[{:maxlenght=>&quot;200&quot;, :class=>&quot;text_field&quot;, :placeholder=>&quot;Search name&quot;}]" id="search_name_{:maxlenght=>&quot;200&quot;, :class=>&quot;text_field&quot;, :placeholder=>&quot;Search name&quot;}">

阅读其他生成文本字段的rails和haml文件的示例,我认为这两种解决方案是等效的。任何人都可以解释差异吗?

1 个答案:

答案 0 :(得分:0)

在前一行中,您正在创建文本字段,后一种语法是在处理对象时使用的帮助器。看看text_field form helper方法签名

text_field(object_name, method, options = {}) public
  

对于这些助手,第一个参数是实例变量的名称,第二个参数是要对该对象调用的方法(通常是属性)的名称。 Rails会将输入控件的值设置为该对象的该方法的返回值,并设置适当的输入名称。如果您的控制器已定义@person,并且该人的名字是Henry,则该表单应包含:

<%= text_field(:person, :name) %>

产生的输出类似于

<input id="person_name" name="person[name]" type="text" value="Henry"/>

source