我正在设计一个应用程序,用户可以从产品列表中进行选择并将其添加到购物车中。服务将按类别呈现给用户。
并不总是显示相同的产品和类别列表。它们可以每天都在变化。
这一切都很好,棘手的部分是有一些选定的类别,当显示时,需要稍微改变应用程序的行为。
例如,假设我们有3个类别,A类,B类和C. 任何时候显示类别B然后它必须出现在类别A上方的屏幕上。 每当用户从类别B中选择产品时,他们还必须从类别C中选择产品。 如果未显示类别B,则不适用这些规则。
需要注意的一点是,服务和类别列表来自第三方Web服务,因此添加或更改数据库列的余地很小。
实现这种逻辑的最简洁方法是什么?
答案 0 :(得分:1)
大部分内容可以在控制器或模型中进行整理。
那么:关于哪些类别在上面显示哪些其他类别只是类别的排序顺序的逻辑是?因此,您可以在“类别”模型上保留“排序列”,并按此字段对其进行排序。
如果选择其中一个选项,“必须选择其中一个”更棘手 - 但绝对是基于模型的验证。我认为你有一种“订单”模式可以将用户放在购物篮中的东西整合在一起? 添加一个类似于:
的验证方法validate :product_b_and_product_c
def product_b_and_product_c
if self.products.any? {|p| p.category == 'category_b' }
errors.add_to_base "must choose product from cat C if you have one in cat B" unless self.products.any? {p| p.category == 'category_c' }
end
end