如果在轨道上的红宝石中字段为空,如何隐藏表单元素?

时间:2013-06-20 08:45:17

标签: ruby-on-rails ruby ruby-on-rails-3

我在我的视图中使用OpenStruct form for,如下所示,

<%= form_for(OpenStruct.new(params[:f]), as: :f, url: product_types_path, method: :get, remote: true, html: {class: 'type'}) do |f| %>     
  <div class="field">
    <%= f.label :product_type_id %>    
    <%= foreign_key(f, :product_type_id, Asset::Product::Type) %>
  </div>
<% end %>

如果product_type_id is nil or blank or empty?

,我想隐藏其他表单元素

我试过了,

<% unless product_type_id.blank? %>
  <div class="field">
    <%= render 'form' %>
  </div>
<% else %>
  <p>Select Product Type</p>
<% end %>

1 个答案:

答案 0 :(得分:0)

因此,如果我做对了你想要做的就是如果你用param product_type_id收到的内容是空白的话就不会呈现表单。

您是否可以在控制器中实例化变量而不是直接在表单构建器中定义它?

例如在您的控制器中:

def index
  @product_type = OpenStruct.new(params[:f])
end

并在您看来:

<% unless @product_type.product_type_id.blank? %>
  <div class="field">
    <%= render 'form', product_type: @product_type %>
  </div>
<% else %>
  <p>Select Product Type</p>
<% end %>

最后你的部分:

<%= form_for(product_type), as: :f, url: product_types_path, method: :get, remote: true, html: {class: 'type'}) do |f| %>     
  <div class="field">
    <%= f.label :product_type_id %>    
    <%= foreign_key(f, :product_type_id, Asset::Product::Type) %>
  </div>
<% end %>