Ruby on Rails中禁用了text_field

Vit*_*ani 9 ruby ruby-on-rails

我有以下代码来禁用text_field当用户不是管理员时它正常工作:

<div class="form-group">
<%= f.label :nome, "Genero" %>
<%= f.text_field :nome, class: "form-control", disabled: true if not is_admin? %>
</div>
Run Code Online (Sandbox Code Playgroud)

但是当用户是管理员时,text_field它就会消失.有谁知道为什么会这样,我该怎么办?

Kir*_*rat 28

假设is_admin?返回true或者false,你可以简单地做

<%= f.text_field :nome, class: "form-control", disabled: !is_admin? %>
Run Code Online (Sandbox Code Playgroud)

当前,if条件if not is_admin?应用于整个文本字段,这导致is_admin?返回true时文本字段消失以及当条件返回false文本字段时显示.


mwf*_*ley 5

您的代码未按预期工作的具体原因是运算符优先级问题 -if测试应用于整个文本字段,而不仅仅是disabled参数。

对此最直接的解决方案(虽然不一定是最好的)是true if not is_admin?用括号括起来:

<%= f.text_field :nome, class: "form-control", disabled: (true if not is_admin?) %>
Run Code Online (Sandbox Code Playgroud)

否则,整个文本字段都会if应用到它,如下所示:

<%= (f.text_field :nome, class: "form-control", disabled: true) if not is_admin? %>
Run Code Online (Sandbox Code Playgroud)

所以它只会为非管理员用户呈现- 即 whenis_admin?为 false。

此外,当它被渲染时,它总是disabled. (从好的方面来说,将使非管理员更难滥用。)