Rails: 如果变量存在,则为输入字段设置一个值
Rails: Setting a value to input field if variable exists
当 id 传递给控制器中的新操作时,我正在尝试为两个文本字段输入设置一个值。当前代码有效,但我想知道是否可以缩短代码。
当前代码
查看
<div class="custom-input">
<% if @debtor %>
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.name %>'>
<% else %>
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form">
<% end %>
</div>
<% if @debtor %>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id %>
<% else %>
<%= f.text_field :debtor_id, class: "form-control" %>
<% end %>
我尝试删除 if-else 部分以使代码更短
更短的代码
查看
<div class="custom-input">
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.name if @debtor %>'>
</div>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id if @debtor %>
当没有债务人被传递时,缩短的代码导致第一个输入有一个 "hanging" 价值标签(即它只显示价值。它后面没有等号)
<input type="text" name="debtor_name" class="form-control ui-autocomplete-input" id="debtor-search-form" value autocomplete="off">
而第二个输入消失。
"hanging" 值标签可以吗?我检查了 html,如果我单击 'edit as html'
,"hanging" 值标记解析为 value=""
有没有办法缩短代码,还是我应该坚持下去?
你可以试试try object
<div class="custom-input">
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.try(:name) %>'>
</div>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.try(:id) %>
悬挂的价值标签没有什么区别。如您所见,它与 value=""
相同,即 "default" 值。它也是完全有效的 HTML5.
HTML 属性与 value
一样很好,在 HTML5 中。此外,根据您的 html.erb
代码判断,raw HTML 源代码可能读作 value=''
。
我猜你正在使用 Chrome 或 Firefox 的开发者工具,它们会尝试 更正 并为你格式化看起来很奇怪的 HTML,并且可能会显示它没有空 =''
.
那么问题来了:
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id if @debtor %>
是运算符优先级。您的 if
适用于整个陈述。
尝试:
<%= f.text_field :debtor_id, class: "form-control", value: (@debtor.id if @debtor) %>
或者:
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.try!(:id) %>
当 id 传递给控制器中的新操作时,我正在尝试为两个文本字段输入设置一个值。当前代码有效,但我想知道是否可以缩短代码。
当前代码
查看
<div class="custom-input">
<% if @debtor %>
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.name %>'>
<% else %>
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form">
<% end %>
</div>
<% if @debtor %>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id %>
<% else %>
<%= f.text_field :debtor_id, class: "form-control" %>
<% end %>
我尝试删除 if-else 部分以使代码更短
更短的代码
查看
<div class="custom-input">
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.name if @debtor %>'>
</div>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id if @debtor %>
当没有债务人被传递时,缩短的代码导致第一个输入有一个 "hanging" 价值标签(即它只显示价值。它后面没有等号)
<input type="text" name="debtor_name" class="form-control ui-autocomplete-input" id="debtor-search-form" value autocomplete="off">
而第二个输入消失。
"hanging" 值标签可以吗?我检查了 html,如果我单击 'edit as html'
,"hanging" 值标记解析为 value=""有没有办法缩短代码,还是我应该坚持下去?
你可以试试try object
<div class="custom-input">
<input type="text" name="debtor_name" class="form-control" id="debtor-search-form" value='<%= @debtor.try(:name) %>'>
</div>
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.try(:id) %>
悬挂的价值标签没有什么区别。如您所见,它与 value=""
相同,即 "default" 值。它也是完全有效的 HTML5.
HTML 属性与 value
一样很好,在 HTML5 中。此外,根据您的 html.erb
代码判断,raw HTML 源代码可能读作 value=''
。
我猜你正在使用 Chrome 或 Firefox 的开发者工具,它们会尝试 更正 并为你格式化看起来很奇怪的 HTML,并且可能会显示它没有空 =''
.
那么问题来了:
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id if @debtor %>
是运算符优先级。您的 if
适用于整个陈述。
尝试:
<%= f.text_field :debtor_id, class: "form-control", value: (@debtor.id if @debtor) %>
或者:
<%= f.text_field :debtor_id, class: "form-control", value: @debtor.try!(:id) %>