Search code examples
ruby-on-railsrubymetaprogramming

How to dynamically create methods with parameter in ruby?


How can I dynamically create methods like this using ruby metaprogramming ?

class CommentBridge < Bridge

  def id(comment)
    comment.id
  end

  def message(comment)
    comment.message
  end

  def votes_count(comment)
    comment.votes_count
  end

end

I tried this but it is not working.

  ['id', 'message', 'votes_count'].each do |method|
    define_method "#{method}" do |parameter|
      method(parameter.method)
    end
  end

Solution

  • You should use public_send to call methods based on their name:

      ['id', 'message', 'votes_count'].each do |method|
        define_method "#{method}" do |parameter|
          parameter.public_send(method)
        end
      end