我有一个rails应用程序,用户可以通过订单创建产品和购买产品。
我的usertable中有一个名为usermode的字段,用于将用户设置为store_owner或customer。
OR
我是rails的新手,不确定我是否需要将此逻辑放在模型中,创建单独的控制器,或在我现有的产品控制器索引中执行某种if语句。我认为它应该放在控制器索引中。
我怎样才能做到这一点?
答案 0 :(得分:0)
根据我的意见,
我会将相同的逻辑放在同一个控制器中。在这两种情况下( Store_Owner 或客户),您显示相同的数据类型(产品)。这两种情况唯一的变化是数据不同。 ROR与DRY有关。所以我认为没有必要为此创建新的视图模板。然而,有些人认为控制器中的每个动作必须代表单个功能(以减少控制器中的混乱)。这意味着控制器中的条件语句更少。所以你有两个选择:
我认为第一个是更好的方法
创建单个视图文件。在模型中写一个方法,如下面的
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)查看:与how we will show
相关的逻辑将在此处
2)模型:与What data
或changes on data
相关的逻辑将在此处。
3)控制器:与fetch data from model
和decide 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