通常我喜欢这个
loops
# app/view/products/index.html.haml
- @products.each do |product|
= product.name
= product.foo
= product.bar
正常scoping
# app/view/products/show.html.haml
= @product.name
= @product.price
= @product.xyz
见上述情况,我正在重复自己。我每次都使用相同的product
字。我希望它可以根据我的上下文附加/绑定method
。
我宁愿做这样的事情
对于loops
,我喜欢做类似
- @products.each(context_binding: true) do
= name
= foo
= bar
scoping
- context_binding @product do
= name
= price
= xyz
我想这是可能的,可以使用method missing
来完成我不知道该怎么做。你能提供一些提示,以便我可以归档这类东西。
答案 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