Модель помощника в рельсах и рендера в представлении - PullRequest
0 голосов
/ 01 ноября 2011

Я хочу написать какой-нибудь метод в помощнике по модели и сделать на мой взгляд. Моя модель продукта имеет ценовую колонку. В представлении я хочу иметь возможность написать @ product.tier_one_quantity_one, например. Как написать помощник и как отрендерить?

Могу ли я назначить несколько переменных одним методом?

module ProductsHelper
  def price_variation(product)
    @tier_one_quantity_one = @product.price * 1.2
    @tier_one_quantity_wo = @product.price * 1.4
    ...
  end
end

1 Ответ

1 голос
/ 01 ноября 2011

Помощники используют более функциональный подход:

module ProductsHelper
  def tiered_price(product, tier, quantity)
    price = case tier
      when 1 then product.price * 1.2
      when 2 then product.price * 1.4
      else product.price * 1.6
    end
    price * product.quantity
  end
end

# view
<%= number_to_currency( tiered_price(@product, 1, 2) ) %>

Но мне кажется, что это было бы лучше в модели:

class Product < ActiveRecord::Base
  def tiered_price(tier, quantity)
    price = case tier
      when 1 then price * 1.2
      when 2 then price * 1.4
      else price * 1.6
    end
    price * quantity
  end
 end

 # view
 <%= number_to_currency(@product.tiered_price(1, 2)) %>

Если вы действительно хотите иметь возможностьнапишите @ product.tier_one_quanity_two, как find_by_name, вам нужно подключиться к method_missing, который имеет некоторую сложность и скорость, но будет выглядеть примерно так:

...