我做了一些谷歌搜索但无济于事.
我的场景是我有一个辅助方法,它采用一些选项,然后在页面上通过部分渲染一个常用的图形元素,由发送的选项调整.这些选项中的大多数具有由助手设置的不同的可覆盖默认值,基于前两个必需参数 - 对象和上下文.
def my_helper(object, context, options = {})
defaults = { ... }
defaults[:foo] = "bar" if object.is_a?(SomeObject)
defaults[:ping] = "pong" if context.eql?(:some_context)
...
render partial: '/path/to/partial', locals: defaults.merge(options)
end
Run Code Online (Sandbox Code Playgroud)
虽然上下文都很好看,但是我已经决定放弃查看对象类,并且在合理的情况下使用respond_to?它.我想要避免的是多个if object.respond_to?(:foo?) && object.foo?,只是使用类似的东西if object.respond_to_and_send(:foo?),如果对象无法响应方法,则返回nil.
更新
我忘了提到这是一个Rails 3.2应用程序,这是一个耻辱try,因为在Holger Just的答案中提到的Rails 4中的更新方法正是我需要的.