在rails中建模业务属性/设施

时间:2012-11-03 16:05:39

标签: ruby-on-rails

我的应用程序中有一个Business模型,它将存储有关

的信息
  • 餐馆
  • 酒吧
  • 商店
  • 美发沙龙

部分商家共享属性/设施:

  • 无线上网
  • 的A / C
  • 无障碍环境
  • 等。

但有些是针对单一类型的企业,例如餐馆:

  • 取出
  • 投放
  • 着装要求
  • 户外座位

我想知道在DB中建模这些信息的最佳方法是什么?

我目前的想法:

使用Business的单个表格来保存所有信息和属性。大多数属性都是布尔值,因此只要属性不适用于业务类型,它就只是false

但是,我不确定,如果有更好的方法可以做到这一点。还不确定如何在视图级别处理这些差异。例如,在创建业务时,我希望选项显示/设置适用于业务类型的属性。

1 个答案:

答案 0 :(得分:1)

这就是我这样做的方式。您应该有一个名为business_type的属性,可让您选择要显示的属性。 例如,在展示视图中:

<% if @business.business_type == "restaurant" %>
  Provides take out: <%= @business.take_out %>
<% end %>

您可以使用jQuery根据餐馆类型更改新表单上的可用字段:

<%= f.select :business_type, [["Restaurant", "restaurant"], ["Store", "store"]] %>
<script>
  $('#business_business_type').change(function(){
    // hide or show fields here based on this.value
  });
</script>

如果你想避免拥有一堆数据库列,你可以使用rails 3.2中的键值存储(向下{3/3}的3/4): 创建一个名为amenities的列。然后在business.rb

store :amenities, accessors: [:wifi, :ac, :accessibility, ...]