我的应用中有User
和Plan
个。
我们希望为每位用户创建自定义折扣。
我认为我的SpecialDiscount
模型应该belongs_to :user
和belongs_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?
答案 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次更改。通过将其放入模型中,您可以避免进行多项更改。