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

时间:2015-07-29 19:29:47

标签: ruby-on-rails ruby-on-rails-4 erb

当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 %>

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

<input type="text" name="debtor_name" class="form-control ui-autocomplete-input" id="debtor-search-form" value autocomplete="off">

而第二个输入消失。

“挂”值标签好吗?我检查了html,如果我点击'编辑为html',“悬挂”值标签解析为value =“”

有没有办法缩短代码或者我应该坚持使用它?

3 个答案:

答案 0 :(得分:6)

在HTML5中,将HTML属性设置为value就可以了。此外,原始 HTML源代码可能显示为value='',根据您的html.erb代码判断。
我猜您正在使用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) %>

答案 1 :(得分:1)

悬挂值标签没有区别。正如您所见,它与value=""相同,这是“默认”值。它也是完全有效的HTML5。

答案 2 :(得分:0)

您可以使用try 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) %>