使用Rails 3引用构建器应用程序

时间:2014-10-23 17:15:22

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

我有三种型号:隔间,选项和产品,设置如下:

class Compartment < ActiveRecord::Base
    has_and_belongs_to_many :products
    has_and_belongs_to_many :options
    ...
end

class Option < ActiveRecord::Base
    has_and_belongs_to_many :products
    has_and_belongs_to_many :compartments
    ...
end

class Product < ActiveRecord::Base
    has_and_belongs_to_many :options
    has_and_belongs_to_many :compartments
    ...
end

产品有许多隔间和隔间有很多选择。

我不是100%确定模型是否设置正确以实现我想要的效果。每当管理员创建产品时,他应该看到所有隔间和所有选项都被创建,这样他就可以选择最终用户可用的隔间和选项。每当用户登录并想要基于产品创建报价时,他应该使用管理员选择的选项来构建报价。一个简单的例子:

管理员视图:

  • 产品A
    • 隔间A
      • 选项A
      • 选项B
      • 选项C
    • B舱
      • 选项A
      • 选项B
      • 选项C

用户视图:

  • 产品A
    • 隔间A
      • 选项B
      • 选项C
    • B舱
      • 选项A

隔间可以属于许多产品,选项也是如此,它们可以属于许多隔间。

我很难围绕模型配置,最重要的是如何设置表单来保存/编辑/创建产品和报价。

再次感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我会在隔间和选项之间以及产品和隔间之间设置地图表并使用

Class Products 
  has_many :product_compartments
  has_many :compartments, through: :product_compartments #Name of the map table
end

Class Compartment 
  has_many :product_compartments
  has_many :products, through: :product_compartments #Name of the map table
  has_many :compartment_options
  has_many :options, through: :compartment_options #Name of the map table
end

Class Option 
  has_many :compartment_options
  has_many :compartments, through: :compartment_options #Name of the map table
end

在您的管理界面中,您需要在表格上将产品连接到隔间,这可以简单到2个下拉菜单,一个带产品,另一个带隔间。

隔间和选项的类似形式

然后您可以通过

之类的内容为产品构建报价表单
<% @product.compartments.each do |compartment| %>
  <%= #code rendering a checkbox for the compartment %>
  <% compartment.options.each do |option| %>
    <%= #code rendering a checkbox for the option %>
  <% end %>
<% end %>

然后你可以用javascripts隐藏东西,并使它成为一个很好的用户界面。