产品通过订单逻辑

时间:2014-01-10 01:09:15

标签: ruby-on-rails ruby-on-rails-3.2

我有一个rails应用程序,用户可以通过订单创建产品和购买产品。

我的usertable中有一个名为usermode的字段,用于将用户设置为store_owner或customer。

  • IF usermode ='Store_Owner'
    • 我希望我的产品索引显示由current_user创建的产品

OR

  • IF usermode ='Customer'
    • 我希望我的产品索引显示用户通过订单>订单项>产品购买的产品

我是rails的新手,不确定我是否需要将此逻辑放在模型中,创建单独的控制器,或在我现有的产品控制器索引中执行某种if语句。我认为它应该放在控制器索引中。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

根据我的意见,

我会将相同的逻辑放在同一个控制器中。在这两种情况下( Store_Owner 客户),您显示相同的数据类型(产品)。这两种情况唯一的变化是数据不同。 ROR与DRY有关。所以我认为没有必要为此创建新的视图模板。然而,有些人认为控制器中的每个动作必须代表单个功能(以减少控制器中的混乱)。这意味着控制器中的条件语句更少。所以你有两个选择:

我认为第一个是更好的方法

  1. 创建单个视图文件。在模型中写一个方法,如下面的

    def self.product_data_of(user) # The self indicate class methods
        # check with if else that user is Store_Owner or Customer
        # return appropriate data
    end
    

    从这样的控制器调用此方法(我假设类名是Product)

    @products = Product.product_data_of(current_user)
    

    您可以在视图文件中使用此@products变量。

  2. 创建单个视图文件在控制器中编写两种不同的方法,但渲染相同的视图文件。在这种情况下,无需在模型中创建新方法。但我仍然更喜欢以前的做法。

  3. 修改

    一般方法是

    1)查看:与how we will show相关的逻辑将在此处

    2)模型:与What datachanges on data相关的逻辑将在此处。

    3)控制器:与fetch data from modeldecide which page to render/redirect

    等流程相关的逻辑

答案 1 :(得分:0)

解决方案是在我的产品控制器中执行类似的操作:

if current_user.usermode =="Store_Owner" then
  @dashboards = current_user.dashboards.active.order(:title)
elsif current_user.usermode =="Customer" then
  @dashboards = Dashboard.joins(line_items: :order).where('orders.user_id' => current_user.id).all.uniq

end