Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过订单逻辑生成产品_Ruby On Rails_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 通过订单逻辑生成产品

Ruby on rails 通过订单逻辑生成产品,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有一个rails应用程序,用户既可以创建产品,也可以通过订单购买产品 在我的usertable中有一个名为usermode的字段,它将用户设置为商店所有者或客户 如果usermode='Store\u Owner' 我希望我的产品索引显示当前用户创建的产品,如果 或 如果usermode='Customer' 我希望我的产品索引显示用户通过订单>行项目>产品购买的产品 我是rails新手,不确定是否需要将此逻辑放入模型中,创建单独的控制器,或者在现有产品控制器索引中执行某种if语句。我认为它应

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

在我的usertable中有一个名为usermode的字段,它将用户设置为商店所有者或客户

如果usermode='Store\u Owner' 我希望我的产品索引显示当前用户创建的产品,如果 或

如果usermode='Customer' 我希望我的产品索引显示用户通过订单>行项目>产品购买的产品 我是rails新手,不确定是否需要将此逻辑放入模型中,创建单独的控制器,或者在现有产品控制器索引中执行某种if语句。我认为它应该放在控制器索引中


我怎样才能做到这一点呢?

根据我的意见

我会把同样的逻辑放在同一个控制器中。在这两种情况下,店主或客户都显示相同的数据类型产品。在这两种情况下,唯一的变化是您的数据不同。罗尔快要干涸了。因此,我认为没有必要为此创建新的视图模板。然而,有些人认为控制器中的每个动作都必须表示单个功能,以减少控制器中的混乱。这意味着控制器中的条件语句更少。所以你有两个选择:

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

创建单个视图文件。在模型中编写一个方法,如下所示

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变量

创建单个视图文件在控制器中写入两种不同的方法,但渲染相同的视图文件。在这种情况下,不需要在模型中创建新方法。但我还是更喜欢前面的方法

编辑

一般的做法是

1视图:与我们将如何显示相关的逻辑将在这里

2模型:与数据或数据更改相关的逻辑


3控制器:与流相关的逻辑,如从模型中获取数据并决定呈现/重定向哪个页面

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

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

这只是一般的看法,有些情况下,其他方法比这更好。但在大多数情况下,您会发现这一个更好。def self.product_用户数据_放在product.rb中?它里面有什么逻辑?