我想显示带有特定参数的文本字段。当我使用:
%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=>"200", :class=>"text_field", :placeholder=>"Search name"}]" id="search_name_{:maxlenght=>"200", :class=>"text_field", :placeholder=>"Search name"}">
阅读其他生成文本字段的rails和haml文件的示例,我认为这两种解决方案是等效的。任何人都可以解释差异吗?
答案 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"/>