Это не проблема, вам нужно использовать технику, называемую формальная ссылка.Вместо кнопки вы вводите кнопку с кнопкой отправки.Ниже приведен код помощника, который я использую для этого:
def formal_link_to(*args, &block)
options = html_options = name = nil
if block_given?
options = args.first
html_options = args.second
name = capture(&block)
else
name = args.first
options = args.second || {}
html_options = args.third
end
method = html_options.delete(:method) || "POST"
method = method.to_s.upcase
url = url_for(options)
html = "<form class=\"formal-link\" action=\"#{url}\" method=\"post\">"
html += "<input type=\"hidden\" value=\"#{form_authenticity_token}\" name=\"authenticity_token\" />"
html += "<input type=\"hidden\" value=\"#{method}\" name=\"_method\" />"
html += link_to(name, "#", html_options)
html += "</form>"
if block_given?
concat(html)
else
return html
end
end
Этот помощник используется как обычный link_to, но вы можете передать дополнительные параметры: method во второй хеш.Пример:
<%= formal_link_to "Fill in lots", { :action => "fill_in_lots" }, { :method => :post } -%>
Примечания: 1. Это, конечно, приведет к полной перезагрузке страницы, но это неизбежно без использования JavaScript.2. Я предположил, что действие fill_in_lots выставлено для запроса POST.В случае GET вы можете использовать обычный помощник link_to.