Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:有条件地显示/隐藏表单字段的最佳方法?_Ruby On Rails_Forms - Fatal编程技术网

Ruby on rails Rails:有条件地显示/隐藏表单字段的最佳方法?

Ruby on rails Rails:有条件地显示/隐藏表单字段的最佳方法?,ruby-on-rails,forms,Ruby On Rails,Forms,我有一个模型文档,它具有属性种类和上下文。种类是用作枚举的整数(使用优秀的active_enumgem)。上下文仅适用于“2”类文档,即如果文档不是2类文档,则上下文将为空 因此,在创建新文档的表单页面中,我有一个来选择类型,还有一个文本区域用于上下文,它最初是隐藏的: <%= form_for @document do |f| %> ... <%= f.text_area :context, placeholder: 'Context', style: 'di

我有一个模型文档,它具有属性种类上下文。种类是用作枚举的整数(使用优秀的
active_enum
gem)。上下文仅适用于“2”类文档,即如果文档不是2类文档,则上下文将为空

因此,在创建新文档的表单页面中,我有一个
来选择类型,还有一个文本区域用于上下文,它最初是隐藏的:

<%= form_for @document do |f| %>

  ...  

  <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %>

  <%= f.select :kind, Document.active_enum_for(:kind).to_select %>

  ...

<% end %>

...  
...
在与下拉列表中的change()事件绑定的函数中,使用jQuery的show()和hide()方法显示和隐藏textarea

到目前为止,一切顺利。但是在文档的编辑页面上,我不希望在初始页面加载时总是隐藏上下文文本区域,因为我们可能正在编辑类型为2的文档。因此,如果我们正在编辑第2类文档,我希望文本区域最初显示,但在其他情况下隐藏

以下是我现在拥有的:

<% if @document.kind == 2 %>
  <%= f.text_area :context, placeholder: 'Context' %>
<% else %>
  <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %>
<% end %>

难道没有更好的办法吗?这让我觉得有点罗嗦和多余;我不可能只调用一次
f.text\u区域
,并有条件地包含
样式:
选项吗

还是我想得太多了?

用这个:

  <%= f.text_area :context, placeholder: 'Context', style: "#{'display:none' if @document.kind == 2}" %>

或者您可以为此添加一个css类

display-none{
  display:none;
}

<%= f.text_area :context, placeholder: 'Context', class: "#{'display-none' if @document.kind == 2}" %>
显示无{
显示:无;
}

谢谢,或者你可以试试javascript?这是一种减少重复代码的方法,如果有许多字段要隐藏,这种方法有一些优点

<%= f.text_area :context, placeholder: 'Context' %>

<script type="text/javascript">
    $(function(){
        if ($('#document_kind').val() != '2')
            $('#document_context').hide();
    });
</script>

$(函数(){
if($('#document_kind').val()!=“2”)
$(“#文档_上下文”).hide();
});

我同意99%的时候内联样式是一个糟糕的想法,但我认为对于一个将要使用Javascript隐藏和显示的元素来说,“display:none;”可能是一个例外。