Rails仅在条件时显示表单值

时间:2013-09-03 12:25:32

标签: ruby-on-rails validation

你好,我有一个像

这样的表格
    <%= 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 %>

作品

2 个答案:

答案 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' }) %>