Rails:如果存在变量,则将值设置为输入字段

oss*_*sse 3 ruby-on-rails erb ruby-on-rails-4

当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 %>
Run Code Online (Sandbox Code Playgroud)

我尝试删除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 %>
Run Code Online (Sandbox Code Playgroud)

当没有债务人通过时,缩短的代码会导致第一个输入具有"挂起"值标记(即它只显示值.后面没有等号)

<input type="text" name="debtor_name" class="form-control ui-autocomplete-input" id="debtor-search-form" value autocomplete="off">
Run Code Online (Sandbox Code Playgroud)

而第二个输入消失了.

是一个"挂"值标签好吗?我查看了html,如果点击'edit as html',"悬挂"值标签会解析为value =""

有没有办法缩短代码或者我应该坚持下去?

tom*_*ave 6

value在HTML5中使用HTML属性就可以了.此外,原始 HTML源代码可能读作value='',从您的html.erb代码判断.
我猜您正在使用Chrome或Firefox的开发人员工具,它们会尝试为您修正和格式化奇怪的HTML,并且可能会在没有空的情况下显示它=''.

然后,这个问题:

<%= f.text_field :debtor_id, class: "form-control", value: @debtor.id if @debtor %>
Run Code Online (Sandbox Code Playgroud)

是运算符优先级.您if适用于整个声明.
试试:

<%= f.text_field :debtor_id, class: "form-control", value: (@debtor.id if @debtor) %>
Run Code Online (Sandbox Code Playgroud)

要么:

<%= f.text_field :debtor_id, class: "form-control", value: @debtor.try!(:id) %>
Run Code Online (Sandbox Code Playgroud)