某些用户的定价计划和自定义折扣

时间:2018-01-18 21:18:13

标签: ruby-on-rails activerecord rails-activerecord

我的应用中有UserPlan个。

我们希望为每位用户创建自定义折扣。

我认为我的SpecialDiscount模型应该belongs_to :userbelongs_to :plan(所以它是一个加入模型),在这个模型中我们有discounted_price

如何在定价页面中显示计划以及用户可能拥有的特殊价格?

一种简单的方法就是这样:

# Controller
@plans = Plan.all
@user_special_discounts = current_user.special_discounts # They might no exist, since special discounts are optional

# In view.html.erb

<% @plans.each do |plan| %>

    This plan price is <%= plan.price %>

    <% if discount = @user_special_discounts.select {|discount| discount.plan == plan } %>

        You have a discount on this plan: <%= discount.discounted_price %>

    <% end %>

<% end %> 

这是一个很好的方法,还是有更多的轨道惯用方法,可能使用ActiveRecord .select?

1 个答案:

答案 0 :(得分:1)

我会在User模型上定义一个方法,该方法将返回给定计划的特殊折扣。所以

def special_discount_for(plan)
  special_discounts.select {|discount| discount.plan == plan }
end

通常,每个视图具有多个实例变量并非惯用。此外,在视图中使用逻辑通常是不好的做法(例如:@ user_special_discounts.select {| discount | discount.plan == plan})。如果您有10个需要显示special_discounts的地方,并且您需要更改实施,则需要按照自己的方式进行10次更改。通过将其放入模型中,您可以避免进行多项更改。