Rails测试hstore列中的键

时间:2014-09-15 19:04:37

标签: ruby-on-rails hstore

我有一个Rails 4应用,其中模型Vehicle有一个名为data的hstore列。该应用还使用了gem 'acts_as_tenant'。模型Tenant还有一个名为data的hstore列。

我正在做的是在Tenant for Vehicle表中存储用户定义的字段。换句话说,如果租户数据(hstore)列包含'color',那么我希望每个Vehicle在其数据(hstore)列中具有相同的密钥。

这是车辆表格的代码:

   <% if current_tenant.data.present? %>
        <%= f.simple_fields_for :data do |d| %>
            <% current_tenant.data.each do |key, value| unless ???????@vehicle.data%>
                <div class="row">
                  <p class='col-md-3'>
                    <%= text_field_tag key, key, :class => 'text_field dynamicAttributeName' %>
                  </p>
                  <p class='col-md-3'>
                    <%= d.text_field key, :class => 'text_field', :value => value %>
                  </p>
                  <p class='col-md-1'>
                    <a herf='#' class='btn removeRow'>X</a>
                  </p>
                </div>
            <% end %>
        <%- end -%>
    <% end %>

    <% if @vehicle.data.present? %>
        <%= f.simple_fields_for :data do |d| %>
            <% @vehicle.data.each do |key, value| %>
                <div class="row">
                  <p class='col-md-3'>
                    <%= text_field_tag key, key, :class => 'text_field dynamicAttributeName' %>
                  </p>
                  <p class='col-md-3'>
                    <%= d.text_field key, :class => 'text_field', :value => value %>
                  </p>
                  <p class='col-md-1'>
                    <a herf='#' class='btn removeRow'>X</a>
                  </p>
                </div>
            <% end %>
        <%- end -%>
    <% end %> 

我的问题是第<% current_tenant.data.each do |key, value| unless ???????

我不想两次添加相同的密钥。因此,如果Vehicle数据字段已经有color,我不想再添加它。

如何测试Vehicle.data字段以查看其密钥是否等于current_tenant.data.each do |key, value|

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:0)

在核心,通过store_accessor :data在Rails模型上定义的hstore列就像哈希一样,如您所见。

您可以进行简单的检查,看看vehicle.data哈希是否具有您要查找的密钥。

类似的东西:

current_tenant.data.each do |key, value|
  puts "#{key} => #{value}" unless vehicle.data.key?(key)
end

将打印键值对,除非车辆hstore列也具有相同的键