0

你好我有一个像

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

作品

4

2 回答 2

2

我强烈建议将您的逻辑放在辅助方法中:

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 : '' %>

也可以随意将其移至辅助方法。

于 2013-09-03T12:35:25.247 回答
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' }) %>
于 2013-09-03T13:07:55.260 回答