你好,我有一个像
这样的表格 <%= form_for @user,
:url => url_for(:controller => 'frontend',
:action => 'registration_completion') do |f| %>
<div class="control-group">
<%= f.label :name, "Jméno", :class => 'control-label' %>
<div class="controls">
<%= f.text_field :name, :class => 'text_field' %>
</div>
</div>
并且用户正在显示他可以看到已经注册的值的表单,但是如果某些条件我想要隐藏的某些值(特别是我需要隐藏用户名的值,如果它包含@)可能吗?谢谢
解决方案:似乎
<% if @user.name.include?('@') %>
<%= f.text_field :name %>
<% else %>
<%= f.text_field :name, :value => "" %>
<% end %>
作品
答案 0 :(得分:1)
我强烈建议将你的逻辑放在辅助方法中:
module UserHelper
def name_input(instance, f, options = {})
options[:html_options] ||= {}
f.text_field :name, options[:html_options] if instance.name.include?('@')
end
end
然后在你看来:
<%= name_input(@user, f, html_options: { class: 'text_field' }) %>
如果您想隐藏您可以执行的值:
<%= f.text_field :name, value: @user.name.include?('@') ? @user.name : '' %>
也可以将其移动到辅助方法。
答案 1 :(得分:1)
要在用户名包含@
符号时创建隐藏字段,您可以使用以下帮助程序方法
module UserHelper
def hidden_name_field(user, f, options = {})
options[:html_options] ||= {}
if user.name.include?('@')
f.hidden_field(:name, options[:html_options])
else
f.text_field(:name, options[:html_options])
end
end
end
并以您的形式使用它:
<%= hidden_name_field(@user, f, html_options: { class: 'text_field' }) %>