Обычно, если что-то вызывает боль в хамле, это означает, что вы должны рефакторинг хитрого бита вспомогательному или частичному и вызывать его.
// some_helper.rb
def new_snazzy_select_tag(options = [])
select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end
Кроме того, вы должны использовать фильтр :javascript
для рендеринга javascript, так как он поместит его в тег script и разрешит отступ.
Наконец, вы можете использовать #{ruby_expression}
в любом месте haml, включая :javascript
фильтры, что очень удобно, когда вам нужно вывести результат выражений ruby в места, которые не являются непосредственно содержимым элементов html.
// some_view.html.haml
:javascript
$('#mylink').click(function() {
$('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
};