Если ваше событие onclick
возвращает true, ваш браузер следует href, если он возвращает false, ваш браузер не будет следовать. Итак, вот фокус:
def image_to_function(name, function, html_options = {})
html_options.symbolize_keys!
tag(:input, html_options.merge({
:type => "image", :src => image_path(name),
:onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function}; return false;"
}))
end
В качестве альтернативы пусть #{function}
возвращает true или false и вставляет оператор return
перед интерполяцией. Таким образом, вызываемая функция может контролировать, должен ли браузер следовать href.
PS: Возможно, вы захотите заменить tag(:input...
конструкцией link_to_function(image_path(name), ...
, чтобы вы могли использовать ее и вне форм.