我有一个用户模型,它有投票方法。我想为投票编写代理方法。
这是可读的方式:
def vote_up item
return false unless can? :vote, item
vote item, :up
end
def vote_down item
return false unless can? :vote, item
vote item, :down
end
这是干燥的方式:
%w(up down).each do |vtype|
define_method "vote_#{vtype}" do |item|
return false unless can? :vote, item
vote item, vtype.to_sym
end
end
哪个更好,为什么?