rails中的上下文绑定

时间:2014-05-06 05:43:25

标签: ruby-on-rails ruby

通常我喜欢这个

  1. loops

    # app/view/products/index.html.haml
    - @products.each do |product|
       = product.name
       = product.foo
       = product.bar
    
  2. 正常scoping

    # app/view/products/show.html.haml 
      = @product.name
      = @product.price
      = @product.xyz
    
  3. 见上述情况,我正在重复自己。我每次都使用相同的product字。我希望它可以根据我的上下文附加/绑定method

    我宁愿做这样的事情

    1. 对于loops,我喜欢做类似

      的事情
       - @products.each(context_binding: true) do 
         = name
         = foo
         = bar       
      
    2. scoping

       - context_binding @product do 
         = name
         = price
         = xyz
      
    3. 我想这是可能的,可以使用method missing来完成我不知道该怎么做。你能提供一些提示,以便我可以归档这类东西。

1 个答案:

答案 0 :(得分:0)

只是为了给你一个想法:

class With
  def initialize(obj)
    @obj = obj
    @str = ''
  end

  def method_missing(name, *args, &block)
    @str += @obj.send(name, *args, &block).to_s
  end
end

def with(obj, &block)
  With.new(obj).instance_eval(&block).to_s
end

Product = Struct.new(:name, :price)
product = Product.new('apple', '2')

output = with(product) do
  name
  price
end

puts output